私はDelphi5を使用しており、実行時に多数のパネルを作成してから、明らかに実行時にパネルにボタンを作成しています。将来、パネルとボタンの組み合わせを動的に作成する必要があるかもしれないので、この方法で行う必要があります。
これらはすべて実行できますが、パネルのコンポーネント名にアクセスする方法が見つからないため、作成したパネルを参照する方法がわかりません。インターネットを探し回ると、FindComponentを使用してパネルコンポーネントを名前で検索できることがわかりましたが、文字列変数を使用して参照できないため、その名前の使用方法がわかりません。たとえば、StringVar :=Panel.Name。タイプの不一致、TComponentNameとStringが発生します。
パネルを作成するときに、各パネルのボタンを作成しました。簡略化すると、次のようになります。
With TypeQuery do begin // Create Panels
First;
While (not eof) do begin // create the actual panel
panelno := FieldByName('Product_type_id').AsInteger;
pnl := Tpanel.Create(Self);
pnl.name := FieldByName('PanelName').AsString;
pnl.color := clInactiveCaption;
pnl.parent := MainForm;
pnl.width := 365;
pnl.Height := 551;
pnl.left := 434
pnl.top := 122;
pnl.caption := '';
With ButtonQuery do begin
Close;
Parameters.parambyname('PanelID').Value := PanelNo;
Open;
First;
While (not eof) and (FieldByName('Product_type_id').AsInteger = PanelNo) do begin //put the buttons on it.
btnName := FieldByName('ButtonName').AsString;
BtnText := FieldByName('ButtonText').AsString;
BtnGroup := FieldByName('Product_Group_ID').AsString;
GrpColour := FieldByName('ButtonColour').AsString;
btn := TColorButton.Create(Self);
btn.Parent := pnl;
btn.Name := BtnName;
Btn.backcolor := HexToTColor(GrpColour);
btn.Font.Name := 'Arial Narrow';
btn.Font.Style := [fsBold];
btn.Font.Size := 10;
. . .
end;
. . .
end;
end;
私はいくつかのフォーラム(これを含む)で、パネルを名前で直接参照する方法がないことを読みました。コンポーネント配列を使用してみましたが、同じ問題が発生します。割り当てられたコンポーネント名でコンポーネントを参照する必要があります。
さて、私は銃のプログラマーではありません-私は何年もの間Delphiを使用して単純なプログラムを作成してきましたが、これははるかに複雑です。これまで、ランタイムコンポーネントの作成に取り組んだことはありません。
FindComponentを使用して、パネルを表示または非表示にすることはできますか?もしそうなら、私が上であなたに示したことを考えると、私が赤ちゃんのステップで取るべきアプローチを私に与えることができますか?
前もって感謝します ...