AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】矩形を作図する(4)
矩形を作図の続きを行います。矩形の作図については今回で終わりです。プロジェクト「p024」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p024」というフォルダを作成し、Windowsのエクスプローラ等で「p023」内のファイルを「p024」の中へコピーします(※移動しないよう注意)
Delphi6を起動します。メニュー「ファイル」→「プロジェクトを開く」を実行し、「C:\DelphiProgram\jww\p024」内の「p023.dpr」を開きます。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p024−矩形を作図
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p024

メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p024」の中に「p024.dpr」として保存
「C:\DelphiProgram\jww\p024」の中に「p023.〜」のファイルが残っていますので、Windowsのエクスプローラ等で削除します。

ファイル「p023.dat」を参照している箇所を「p024.dat」に変更します。

矩形を作図する事についての追加作業を行い、今回で矩形作図については完了とします。追加したい内容は
・実寸・図寸の切替(これまでは実寸のみ)
・設定の事前登録と呼び出し(これまでは直前状態のみ)
とします。
 
図寸での書き出しについては「bz」指定を行う、という事で良いとして、画面上に切替のための設定を付ける事を考えます。Form1画面を下へ少し大きくして、「配置モード」とボタン2つを下へ移動し、[Standard]内の RadioGroupコンポーネントを追加します。大きさを整えて、オブジェクトインスペクタで下記の指定を行います。
Caption 空状態(未入力状態)にします
Colums2横2列にします
Items 実寸
図寸
実寸=0、図寸=1、となります
ItemIndex0 Itemsを指定した後に。
初期値を「実寸」に
TabOrder2[Tab]を押した順序にする為


実寸・図寸切替の状態を示す変数「ZSmode」を宣言します。
type
  TForm1 = class(TForm)
・・・
  ALmode : integer ;
  ZSmode : integer ;
public
・・・
初期設定と呼び出し部を追加します。
// 起動時
procedure TForm1.FormShow(Sender: TObject);
・・・
  ALmode := 2 ;
  ZSmode := 0 ;
  // プログラムのあるフォルダを取得します
・・・
   ReadLn(F, s);  ALmode:= SInt(s);
   ReadLn(F, s);  ZSmode:= SInt(s);
   CloseFile(F);
・・・
  RadioGroup1.ItemIndex := ALmode;
  RadioGroup2.ItemIndex := ZSmode;
  // JWC_TEMP.TXTを開きます
・・・
保存部を追加します。
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
・・・
  ALmode := RadioGroup1.ItemIndex ;
  ZSmode := RadioGroup2.ItemIndex ;
  // 位置情報等を保存
・・・
   WriteLn(F, IntToStr(ALmode));
   WriteLn(F, IntToStr(ZSmode));
   CloseFile(F);
・・・
「JWC_TEMP.TXT」書き出し部分を追加します。
・・・
  x2 := x1 + Xsize;
  y2 := y1 + Ysize;
  if (ZSmode = 1) then
   WriteLn(F, 'bz');
  Rev(w1,w2, x1,y1, 0.0,0.0, JG_Jikukaku);
  Rev(w3,w4, x2,y1, 0.0,0.0, JG_Jikukaku);
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
 
Windowsのメモ帳やテキストエディタ等を利用し、フォルダ「Gapp」内に以下のようなバッチファイルを作成します。
p024_矩形を作図(4).bat
REM p024−矩形を作図(4)
@echo off
REM #jww
REM #cd
REM #zs
REM #zw
REM #0配置点を指示して下さい。(L)free (R)Read
REM #hr
start /w p024.exe
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p024」内にある「p024.exe」をフォルダ「Gapp」内へコピーします。
 
Jw_cad を起動し、何か作図してある状態で
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p024_矩形を作図(4).bat」を実行します。

バッチファイルで指定したように「配置点を指示して下さい」と表示されますので、矩形を作図する点を指示します。

コマンドプロンプト画面が表示されて、上記で作成した外部変形プログラム「p024.exe」=「p024−矩形を作図(4)」が起動されます。

数値を入力して配置モードを指定し[OK]をクリックします。軸角指定無しです。下記のように矩形が作図されます。

再度行います。

今度は「図寸」で作図してみます。

かなり大きい矩形を作図したようです。縮尺1/100でしたので、実寸で1000000mm×500000mmの矩形を作図したようです。ホイールで画面縮小を行い測定コマンドで長さを測ると分かります。

 
 
これで実寸・図寸の切替が出来るようになりました。
 
 
次に、各値を複数登録出来るようにしてみます。
Form1画面を右横に大きくします。[Standard]内の Buttonを配置し、同じく ListBoxを配置し、再度、Buttonを配置します。最初の Button3 の Captionプロパティを「→登録→」、後の Button4 の Captionプロパティを「削除←」とします。

Button3をダブルクリックします。オブジェクトインスペクタのイベント頁の「OnClick」入力欄をダブルクリック、でも構いません。
procedure TForm1.Button3Click(Sender: TObject);
begin
 
end;
となりますので下記のように追記します。
// [→登録→]
procedure TForm1.Button3Click(Sender: TObject);
var
  s : string ;
begin
  s := FloatToStr(SDbl(Edit1.Text)) + ','
   + FloatToStr(SDbl(Edit2.Text)) + '|'
   + IntToStr(RadioGroup2.ItemIndex) + '|'
   + IntToStr(RadioGroup1.ItemIndex) ;
  ListBox1.Items.Add(s);
end;
 
Button4をダブルクリックします。オブジェクトインスペクタのイベント頁の「OnClick」入力欄をダブルクリック、でも構いません。
procedure TForm1.Button4Click(Sender: TObject);
begin
 
end;
となりますので下記のように追記します。
// [削除←]
procedure TForm1.Button4Click(Sender: TObject);
var
  i : integer ;
begin
  if (ListBox1.Items.Count = 0) then exit ;
  i := ListBox1.ItemIndex ;
  if (i >= 0) then
   ListBox1.Items.Delete(i);
end;
 
ListBox1をダブルクリックします。オブジェクトインスペクタのイベント頁の「OnClick」入力欄をダブルクリック、でも構いません。
procedure TForm1.ListBox1Click(Sender: TObject);
begin
 
end;
となりますので下記のように追記します。
// [選択]
procedure TForm1.ListBox1Click(Sender: TObject);
var
  i : integer ;
  s,t : string ;
begin
  if (ListBox1.Items.Count = 0) then exit ;
  i := ListBox1.ItemIndex ;
  if (i >= 0) then begin
   s := ListBox1.Items[i] ;
   i := AnsiPos(',',s);
   t := Copy(s,1,i-1) ;
   s := Copy(s,i+1,Length(s));
   Edit1.Text := t ;
   i := AnsiPos('|',s);
   t := Copy(s,1,i-1) ;
   s := Copy(s,i+1,Length(s));
   Edit2.Text := t ;
   i := AnsiPos('|',s);
   t := Copy(s,1,i-1) ;
   s := Copy(s,i+1,Length(s));
   if (t = '0') then
    RadioGroup2.ItemIndex := 0
   else
    RadioGroup2.ItemIndex := 1;
   i := SInt(s);
   if (i < 0)or(i > 8) then i:=2;  // 一応
   RadioGroup1.ItemIndex := i;
  end;
end;
あとはこのListBox1内容を保存・呼び出しを行えば良いので
procedure TForm1.FormShow(Sender: TObject);
var
  F : TextFile ;
  s : string ;
  i,j : integer ;
begin
・・・
  ZSmode := 0 ;
  ListBox1.Items.Clear ;
  // プログラムのあるフォルダを取得します
・・・
   ReadLn(F, s);   ZSmode:= SInt(s);
   ReadLn(F, s);   j := SInt(s);
   for i:=1 to j do begin
    ReadLn(F, s);
    ListBox1.Items.Add(s);
   end;
   CloseFile(F);
・・・
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
・・・
  i,j : integer ;
・・・
   WriteLn(F, IntToStr(ZSmode));
   j := ListBox1.Items.Count ;
   WriteLn(F, IntToStr(j));
   for i:=0 to j-1 do begin
     s := ListBox1.Items[i] ;
     WriteLn(F, s);
   end;
・・・
とします。
あと、画面が表示された直後は Edit1 にフォーカスがありますが、この際に矢印キー[↑][↓]を押したら ListBox1 にフォーカス移動するようにします。そうすると、この登録データの選択が行いやすいかもしれません。
オブジェクトインスペクタで、Edit1 の OnKeyDown イベント項目内容でダブルクリックをして、
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
  if (Key = VK_UP)or(Key = VK_DOWN) then
   ListBox1.SetFocus ;
end;
と記述します。ついでに Edit2 でも同様にしたいですが上記と同じコードになりますので、オブジェクトインスペクタで Edit2 の OnKeyDown イベント項目内容の右端の[▼]をクリックし 「Edit1KeyDown」を選択します。これで Edit2 の箇所で矢印キー[↑][↓]を押した時も Edit1 と同様に ListBox1 へフォーカスが移動されます。
 
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
実行すると以下のような画面が表示されます。

試しに幾つか登録してみて下さい。

登録されるのは分かると思いますが、少し分かり難いですね。
0/1ではなく実/図、0〜8ではなく 左上〜右下で表示するようにしてみます。
// [→登録→]
procedure TForm1.Button3Click(Sender: TObject);
var
  s : string ;
  i : integer ;
begin
  s := FloatToStr(SDbl(Edit1.Text)) + ','
   + FloatToStr(SDbl(Edit2.Text)) + '|';
  i := RadioGroup2.ItemIndex;
  if (i = 0) then
   s := s + '実|'
  else
   s := s + '図|';
  i := RadioGroup1.ItemIndex;
  Case(i)of
  0: s := s + '左上';
  1: s := s + '左中';
  2: s := s + '左下';
  3: s := s + '中上';
  4: s := s + '中中';
  5: s := s + '中下';
  6: s := s + '右上';
  7: s := s + '右中';
  8: s := s + '右下';
  end;
  ListBox1.Items.Add(s);
end;
// [選択]
procedure TForm1.ListBox1Click(Sender: TObject);
・・・
   s := Copy(s,i+1,Length(s));
   if (t = '実') then
    RadioGroup2.ItemIndex := 0
   else
    RadioGroup2.ItemIndex := 1;
   i := 2;
   if (s = '左上') then i:=0
   else if (s = '左中') then i:=1
   else if (s = '左下') then i:=2
   else if (s = '中上') then i:=3
   else if (s = '中中') then i:=4
   else if (s = '中下') then i:=5
   else if (s = '右上') then i:=6
   else if (s = '右中') then i:=7
   else if (s = '右下') then i:=8;
   RadioGroup1.ItemIndex := i;
  end;
end;
と変更します。
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
「C:\DelphiProgram\jww\p024」内の設定ファイル「p024.dat」を消しておいてから実行すると以下のような画面が表示されますので試しに幾つか登録してみて下さい。



これで先程の数値状態よりは分かりやすくなったでしょうか?
 
 
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p024」内にある「p024.exe」をフォルダ「Gapp」内へコピーします。
 
Jw_cad を起動し、何か作図してある状態で
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p024_矩形を作図(4).bat」を実行します。

バッチファイルで指定したように「配置点を指示して下さい」と表示されますので、矩形を作図する点を指示します。

コマンドプロンプト画面が表示されて、上記で作成した外部変形プログラム「p024.exe」=「p024−矩形を作図(4)」が起動されます。

数値を入力して配置モードを指定し[OK]をクリックします。軸角指定無しです。よく利用する設定値は登録しておくと便利になります。下記のように矩形が作図されます。

 
 
以上で、オリジナルの外部変形アプリケーション「矩形を作図(4)」が作成出来ました。
 
 
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
 [BACK]
 [NEXT]
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.