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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】矩形を作図する(2)
矩形を作図の続きを行います。プロジェクト「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配置モード左上に表示されます
Colums3横3列にします
Items 左上
左中
左下
中上
中中
中下
右上
右中
右下
文字の並びは
↓ /↓ /↓
↓ / ↓ / ↓
↓/ ↓/ ↓
となりますので
注意して下さい
ItemIndex2 Itemsを指定した後に。
初期値を「左下」に
TabOrder2[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]
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.