お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"RE:Dialog的なフォームを関数化する"

この発言は
#01359 凛 さんのDialog的なフォームを関数化する
に対するコメントです

凛 さん、こんにちわ。お陰で暫定版が出来ました。 Form の表示位置や大きさの制御がまだですが、実用上は十分です。 Function PopA(Title: String; var Str1:string; var Str2:string; Lines: String):Char; (手続き的)プログラムの中で、 var Csp1: Char; Sp1,Sp2: String; : : Csp1 := PopA('表面処理仕様の選択',Sp1,Sp2, '-- 無処理 :Non ;' +'A. 電解金メッキ  :AuE ;' +'B. 無電解金メッキ :AuD ;' +'N. ニッケルメッキ :Ni ;' +'F. フラックス :Flx '; の様に書き、現れた ListBox の3行目をクリックすると、 Csp1 'B' Sp1 'B. 無電解金メッキ ' Sp2 'AuD ' となります。Form に隠れる通常の ListBox.Items と違い、表示・選択の内容 がプログラム上で見えるのと、ロジックの進行上で必要な時だけ表示され、此 処で選択しないと先に進まないのがミソです。 Function PopA には Form を含まず、この中で Fpopup を起動します。Form を含まないから、LibUnit の中に置けます。FPopup の中身とインターフェー スは、index を返す他は、殆どご教示頂いたままです。 Function PopA(Title: String; var Str1:string; var Str2:string; Lines: String):Char; var SS1 : Array [0..20] of String; SS2 : Array [0..5] of String; N1,N2,jj,Idx : Integer; S1,Text,Ans : String; Cp : Char; begin S1 := Lines; result := S1[1]; N1 := StrDim(S1,';',SS1,1); // 文字列を配列に分解 JJ := 1; Text := ''; while jj <= N1 do begin StrDim(SS1[jj],':',SS2,1); Text := Text + SS2[1]; if jj < N1 then Text := Text + ','; JJ := JJ + 1; end; if popupf(Title,Text,Idx,ans) = mrOK then // 此処で Form を作る。 begin S1 := SS1[Idx]; N2 := StrDim(S1,':',SS2,1); Str1 := SS2[1]; Str2 := SS2[2]; Cp := S1[1]; end else begin Cp := '?'; Str1 := '****'; Str2 := '****'; end; Result := Cp; end; // 指定した Delimiter で文字列を配列に分解する Function StrDim(St: String; Sep: String; out XX: Array of String; Ini: Integer): Integer; var N1,P1,L1,L3: Integer; S1,S2,Sp : String; begin S1 := St; Sp := Sep; L1 := Length(S1); L3 := Length(XX); N1 := Ini - 1; While L1>0 do begin P1 := Pos(Sp,S1); if P1>0 then begin S2 := Copy(S1,0,P1-1); S1 := Copy(S1,P1+1,L1-P1) ; L1 := Length(s1); end else Begin S2 := S1; L1 := 0; end; N1 := N1 + 1; XX[N1] := S2; if N1 >= L3 then L1 := 0; end; Result := N1; end; unit Xpopup; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls; type TFpopup = class(TForm) ListBox1: TListBox; procedure ListBox1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } ResultString:string; ResultIndex :Integer; end; function popupf(Title: String;Lines: String; var Indx: Integer;var ChosenLine:string):TModalResult; var Fpopup: TFpopup; implementation uses Lib1; {$R *.DFM} function popupf(Title: String; Lines:String; var Indx: Integer; var ChosenLine:string): TModalResult; var F2:TFpopup; AA: Array[0..30] of String; NL,j: Integer; begin F2:=TFpopup.Create(Application); NL := StrDim(Lines,',',AA,1); j := 1; while j <= NL do begin F2.ListBox1.Items.Add(AA[j]); j := j + 1; end; F2.caption := Title; result:=F2.ShowModal; ChosenLine:=F2.ResultString; Indx := F2.ResultIndex; F2.Release; end; procedure TFpopup.ListBox1Click(Sender: TObject); begin ResultString:=ListBox1.Items[ListBox1.ItemIndex]; ResultIndex :=ListBox1.ItemIndex+1; ModalResult:=mrOK; end; end. CommaText を使うと、ブランクも区切りに見てしまうので、此処でも StrDim (StringToDimension)を使いました。他言語で使い慣れたルーチンです。        NOVO  Original document by NOVO 氏 ID:(PXU13352)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum