|
変更系の外部変形アプリケーションのサンプルとして、今回は、範囲選択した文字データの位置整理を行うプログラムを作ってみようと思います。
Jw_cadの標準機能として水平位置を揃える機能はありますが、垂直位置を揃える機能がありませんのでこれを出来るようにします。また、文字の基準点は、各文字データに格納されますのでそれをアテにして基準点の指定は行わない事にします。選択される文字データの位置座標は基準点の座標ですのでそのまま利用出来ますからプログラムは簡単になります。
それではバッチファイルから。
|
p048_文字位置整理.bat |
REM p048−文字位置整理
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #bz
REM #h3
REM #hc 【範囲選択】文字を選択して下さい。
REM #g1
REM #1 文字位置整理の基準点を指示して下さい。(L)free (R)Read
REM #hr
start /w p048.exe |
|
プロジェクト「p048」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p048」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | p048−文字位置整理 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\jww\p048 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p048」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p048」の中に「p048.dpr」として保存
◆
Form1の画面は、取りあえずいつもと同じく、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
biMaximize | False | 最大化しないように |
BorderStyle | bsSingle | 画面をリサイズしないように |
Caption | 文字位置整理 | タイトルバーに表示されます |
Color | clSkyBlue | 画面色 御自由にどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。前回及び上記で作成した「MyFunc.pas」「JwwGaibu.pas」を取り込みます。Unit1.pas の uses節に MyFunc と JwwGaibu を追加します。(※以下では全角空白を付けて桁調整等をしていますが実際は半角空白或いは無しです)
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
MyFunc, JwwGaibu ;
type
TForm1 = class(TForm)
・・・ |
|
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。アイコンが Delphi6デフォルトのものになっていますので、アイコンファイルを作成してフォーム・プロジェクトで指定しておきます。
◆
画面上に [Standard]内の RadioGroup コンポーネントを1つ、Label コンポーネントを1つ、Button コンポーネントを2つ配置します。
|
RadioGroup1
Caption | 位置合わせ(&A) | 左上の表示内容 |
Columns | 2 | 横項目(カラム)の数 |
Items |
水平揃え
垂直揃え | 表示項目内容 |
ItemIndex | 0 | デフォルト指定 |
Label1
Align | alBottom | 画面下部に表示 |
Alignment | taCenter | 水平中央合わせ表示 |
AutoSize | False | 自動サイズ調整をオフ |
Caption | | 表示内容は空に |
Color | $00ECB98A | 色:御自由にどうぞ |
Layout | tlCenter | 垂直中央合わせ表示 |
Button1
Caption | OK(&Y) | ボタン上の文字 |
Default | True | [Enter]キーを押したら[OK] |
Button2
Caption | キャンセル(&N) | ボタン上の文字 |
Cancel | True | [Esc]キーを押したら[キャンセル] |
|
画面のレイアウトは下図のようにしてみました。
オブジェクトインスペクタにて Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリックし、取りあえず下記のように追記します。
|
Unit1.pas |
(・・・前略・・・)
type
TForm1 = class(TForm)
(・・・)
private
{ Private 宣言 }
AppPath : string ;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.Left := Mouse.CursorPos.X - Form1.Width div 2;
Form1.Top := Mouse.CursorPos.Y - 4;
// 初期設定
InitJwwGaibu ;
// プログラムのあるフォルダを取得します
AppPath := ExtractFilePath(Application.ExeName) ;
// JWC_TEMP.TXTを開きます
OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
// 初期設定
S_Init ;
end;
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// JWC_TEMP.TXTを保存します
SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
// 最終処理
EndJwwGaibu ;
end;
end. |
|
Button1、Button2 をダブルクリックして OnClickイベントを記述出来るようにします。
|
Unit1.pas |
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
var
al : integer ;
i : integer ;
ix,iy,xx,yy : double ;
begin
al := RadioGroup1.ItemIndex ;
// 文字データ変更
Label1.Caption := '文字位置変更中です';
Label1.Update ;
dRev(ix,iy, JG_IPoints[1].x,JG_IPoints[1].y, 0.0,0.0,-JG_Jikukaku);
for i:=0 to JW_EntTextN-1 do begin
with JW_EntText[i] do begin
dRev(xx,yy,x1,y1,0.0,0.0,-JG_Jikukaku);
if (al = 0) then
xx := ix
else
yy := iy ;
dRev(x1,y1,xx,yy,0.0,0.0,JG_Jikukaku);
end;
end;
// 生成
SendMem('hd');
SendMem('bz'); // 図寸モード
S_EntAll(-1,-1,-1,-1,-1,-1,-1,0, Label1);
Label1.Caption := 'ファイル生成中です';
Label1.Update ;
Close ;
end;
// [Cancel]
procedure TForm1.Button2Click(Sender: TObject);
begin
Close ;
end;
end. |
|
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p048」内に作成された「p048.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
[BACK]
[NEXT]
|