|
矩形を作図の続きを行います。プロジェクト「p022」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p022」というフォルダを作成し、Delphi6を起動します。メニュー「ファイル」→「プロジェクトを開く」を実行し、「C:\DelphiProgram\jww\p021」内の「p021.dpr」を開きます。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | p022−矩形を作図 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\jww\p022 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p022」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p022」の中に「p022.dpr」を保存
※p021を利用して、p022として新しく保存します。
「p021」を「p022」にする事を忘れないで下さい。
◆
まずは、自分で利用するための「自作関数集」を作ります。メニュー「ファイル」→「新規作成」→「ユニット」を実行します。コード画面にその新しいユニット Unit2.pas の内容が表示されます。(※以下では全角空白を付けて桁調整等をしていますが実際は半角空白或いは無しです)
|
unit Unit2;
interface
implementation
end. |
|
ここに文字列→整数の変換を行う関数 SInt()、文字列→実数の変換を行う関数 SDbl() を作成しておき、メニュー「ファイル」→「名前を付けて保存」で「MyFunc.pas」として保存します。Unit1等からはこのユニットを利用するようにします。文字列から数値に変換する場合、Val()を使う方が例外が発生しにくいので Val()を使っています。
|
unit MyFunc;
interface
function SInt(s:string):integer ;
function SDbl(s:string):double ;
implementation
// 文字列→整数
function SInt(s:string):integer ;
var
a,i : integer ;
begin
if (s <> '') then begin
Val(s,a,i);
if (i <> 0) then
a := 0;
end
else
a := 0;
Result := a;
end;
// 文字列→実数(double)
function SDbl(s:string):double ;
var
a : double ;
i : integer ;
begin
if (s <> '') then begin
Val(s,a,i);
if (i <> 0) then
a := 0.0;
end
else
a := 0.0;
Result := a;
end;
end. |
|
「Unit1.pas」の最初の uses節でこの「MyFunc」を利用するようにします。
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MyFunc ;
type
(・・・中略・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
F : TextFile ;
s : string ;
begin
OKflag := False ;
Xsize := 0.0 ;
Ysize := 0.0 ;
// プログラムのあるフォルダを取得します
AppPath := ExtractFilePath(Application.ExeName) ;
// 位置情報等を読み込み
if (FileExists(AppPath+'p021.dat')) then begin
try
AssignFile(F, AppPath+'p021.dat');
FileMode := 0;
Reset(F);
ReadLn(F, s); Form1.Left := SInt(s);
ReadLn(F, s); Form1.Top := SInt(s);
ReadLn(F, s); Xsize := SDbl(s);
ReadLn(F, s); Ysize := SDbl(s);
CloseFile(F);
except
CloseFile(F);
end;
end;
Edit1.text := FloatToStr(Xsize);
Edit2.text := FloatToStr(Ysize);
// JWC_TEMP.TXTを開きます
end;
(・・・中略・・・)
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
begin
Xsize := SDbl(Edit1.Text) ;
Ysize := SDbl(Edit2.Text) ;
if (Xsize <= 0.0) then begin
(・・・後略・・・) |
|
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。このようにして「MyFunc」として自作の汎用的に利用出来る関数集を鍛え上げていくと、他のプログラムを作る時にも利用出来ますので便利です。
次に、矩形の基準点をどこにするか=配置モードの指定を出来るようにします。[Standard]内の[RadioGroup]が簡単ですのでこれを配置し、オブジェクトインスペクタで以下のようにプロパティを指定します。
Caption | 配置モード | 左上に表示されます |
Colums | 3 | 横3列にします |
Items |
左上
左中
左下
中上
中中
中下
右上
右中
右下 |
文字の並びは
↓ /↓ /↓
↓ / ↓ / ↓
↓/ ↓/ ↓
となりますので
注意して下さい |
ItemIndex | 2 |
Itemsを指定した後に。
初期値を「左下」に |
TabOrder | 2 | [Tab]を押した順序にする為 |
配置モードの指定状態は、RadioGroup1 の ItemIndex プロパティの値(0〜8)で分かります。この数値を変数で扱うようにして保存・読み出し出来るようにし、書き出しファイル「JWC_TEMP.TXT」の作成時に対応させます。
|
(・・・前略・・・)
private
{ Private 宣言 }
AppPath : string ;
OKflag : Boolean ;
Xsize,Ysize : double ;
ALmode : integer ;
public
{ Public 宣言 }
end;
(・・・中略・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
F : TextFile ;
s : string ;
begin
OKflag := False ;
Xsize := 0.0 ;
Ysize := 0.0 ;
ALmode := 2 ;
// プログラムのあるフォルダを取得します
AppPath := ExtractFilePath(Application.ExeName) ;
// 位置情報等を読み込み
if (FileExists(AppPath+'p022.dat')) then begin
try
AssignFile(F, AppPath+'p022.dat');
FileMode := 0;
Reset(F);
ReadLn(F, s); Form1.Left := SInt(s);
ReadLn(F, s); Form1.Top := SInt(s);
ReadLn(F, s); Xsize := SDbl(s);
ReadLn(F, s); Ysize := SDbl(s);
ReadLn(F, s); ALmode:= SInt(s);
CloseFile(F);
except
CloseFile(F);
end;
end;
Edit1.text := FloatToStr(Xsize);
Edit2.text := FloatToStr(Ysize);
RadioGroup1.ItemIndex := ALmode;
// JWC_TEMP.TXTを開きます
end;
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
F : TextFile ;
s : string ;
x1,y1,x2,y2 : double ;
begin
ALmode := RadioGroup1.ItemIndex ;
// 位置情報等を保存
try
AssignFile(F, AppPath+'p022.dat');
ReWrite(F);
WriteLn(F, IntToStr(Form1.Left));
WriteLn(F, IntToStr(Form1.Top));
WriteLn(F, FloatToStr(Xsize));
WriteLn(F, FloatToStr(Ysize));
WriteLn(F, IntToStr(ALmode));
CloseFile(F);
except
CloseFile(F);
end;
// JWC_TEMP.TXTを上書き保存します
try
AssignFile(F, AppPath+'JWC_TEMP.TXT');
ReWrite(F);
if (OKflag) then begin
// [OK]
x1 := 0.0;
y1 := 0.0;
case(ALmode)of
0: begin // 左上
x1 := 0.0;
y1 :=-Ysize;
end;
1: begin // 左中
x1 := 0.0;
y1 :=-Ysize/2.0;
end;
2: begin // 左下
x1 := 0.0;
y1 := 0.0;
end;
3: begin // 中上
x1 :=-Xsize/2.0;
y1 :=-Ysize;
end;
4: begin // 中中
x1 :=-Xsize/2.0;
y1 :=-Ysize/2.0;
end;
5: begin // 中下
x1 :=-Xsize/2.0;
y1 := 0.0;
end;
6: begin // 右上
x1 :=-Xsize;
y1 :=-Ysize;
end;
7: begin // 右中
x1 :=-Xsize;
y1 :=-Ysize/2.0;
end;
8: begin // 右下
x1 :=-Xsize;
y1 := 0.0;
end;
end;
x2 := x1 + Xsize;
y2 := y1 + Ysize;
s := FloatToStr(x1) + ' ' + FloatToStr(y1) + ' ' + FloatToStr(x2) + ' ' + FloatToStr(y1);
WriteLn(F, s);
s := FloatToStr(x2) + ' ' + FloatToStr(y1) + ' ' + FloatToStr(x2) + ' ' + FloatToStr(y2);
WriteLn(F, s);
s := FloatToStr(x2) + ' ' + FloatToStr(y2) + ' ' + FloatToStr(x1) + ' ' + FloatToStr(y2);
WriteLn(F, s);
s := FloatToStr(x1) + ' ' + FloatToStr(y2) + ' ' + FloatToStr(x1) + ' ' + FloatToStr(y1);
WriteLn(F, s);
end
else begin
// [キャンセル]
WriteLn(F, 'hq');
end;
CloseFile(F);
except
CloseFile(F);
end;
end;
(・・・後略・・・) |
|
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのメモ帳やテキストエディタ等を利用し、フォルダ「Gapp」内に以下のようなバッチファイルを作成します。
|
p022_矩形を作図(2).bat |
REM p022−矩形を作図(2)
@echo off
REM #jww
REM #cd
REM #zs
REM #zw
REM #0配置点を指示して下さい。(L)free (R)Read
REM #hr
start /w p022.exe |
|
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p022」内にある「p022.exe」をフォルダ「Gapp」内へコピーします。
Jw_cad を起動し、何か作図してある状態で
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p022_矩形を作図(2).bat」を実行します。
バッチファイルで指定したように「配置点を指示して下さい」と表示されますので、矩形を作図する点を指示します。
コマンドプロンプト画面が表示されて、上記で作成した外部変形プログラム「p022.exe」=「p022−矩形を作図(2)」が起動されます。
数値を入力して配置モードを指定し[OK]をクリックします。
指定した大きさの矩形が作図されました。
以上で、オリジナルの外部変形アプリケーション「矩形を作図(2)」が作成出来ました。
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
[BACK]
[NEXT]
|