Nur im Editor hingedattelt, daher keine Garantie für irgendwas
Delphi-Quellcode:
function TDialog_Hauptprogramm.CreateFrames(): Boolean;
var
j: Integer;
myFrame : TMein_Frame;
function DeleteFrames(): Boolean;
var
i: Integer;
begin
try
for i := Low(Frame)
to High(Frame)
do
begin
if Assigned(Frame[i])
then
FreeAndNil(Frame[i]);
end;
SetLength(Frame, 0);
Result := True;
except
on e:
Exception do
begin
Result := False;
ShowMessage(Format('
Fehler in DeleteFrames(): %s',e.
Message]));
end;
end;
end;
begin
try
// Erst alle Frames löschen
Result := DeleteFrames();
if Result
then
begin
TmpQuery.Close;
TmpQuery.SQL.Clear;
TmpQuery.SQL.Add('
SELECT * FROM meine_tabelle');
TmpQuery.SQL.Add('
WHERE ID_meine_tablle2 = ' + IntToStr(SpinEdit.Value));
TmpQuery.Open;
try
TmpQuery.First;
while not TmpQuery.Eof
do
begin
SetLength(Frame, length(Frame) + 1);
// Frame bauen:
myFrame := TMein_Frame.Create(self);
if Assigned(myFrame)
then
begin
myFrame.Tag := tmpQuery.RecNo;
myFrame.
Name := Format('
Mein_Frame_%d',[myFrame.Tag]);
myFrame.Parent := PnlFramesBack;
myFrame.Align := alLeft;
// Frame ausstatten:
myFrame.IsSelected := False;
myFrame.PnlBack.BevelOuter := bvNone;
myFrame.PnlBack.BevelWidth := 1;
// allen Frame-Komponenten den selben tag vergeben und anklickbar machen:
for j := 0
to myFrame.ComponentCount - 1
do
begin
myFrame.Components[j].Tag := myFrame.Tag;
// Sicher, das alles nur TButtons oder deren Nachfahren sind?
TButton(myFrame).Components[j]).OnClick := OnFrameClick;
TButton(myFrame).Components[j]).Cursor := crHandPoint;
end;
myFrame.Show;
Frame[High(Frame)] := myFrame;
end;
TmpQuery.Next;
end;
finally
TmpQuery.Close;
end;
ScrollBoxFrames.Refresh;
end;
except
on e:
Exception do
begin
ShowMessage('
Fehler in CreateFrames(): ' + e.
Message);
Result := False;
end;
end;
end;
Hier wurde für Frames TMein_Frame genutzt.
Im Folgenden wird für Frames TFrame_ButtonTest.
Sind die kompatibel oder ist das nur eine "BeispielquelltextZurProblemBeschreibungsdifferenz "?
Delphi-Quellcode:
procedure TDialog_MainUnit.FrameClick(Sender: TObject);
var
tmpIdx, i: Integer;
begin
if not Assigned(Sender)
then begin
MessageDlg('
Vernünftige Fehlermeldung machen.',mtError,[mbOk),0);
end else
if not Sender
is TComponent
then begin
MessageDlg('
Noch ''
ne vernünftige Fehlermeldung machen.',mtError,[mbOk),0);
end else begin
try
tmpIdx := TComponent(Sender).Tag;
LblFramesAktiv.Caption := '
Aktiver Frame: ';
for i := Low(Frame)
to High(Frame)
do
begin
TFrame_ButtonTest(Frame[i]).IsSelected := False;
TFrame_ButtonTest(Frame[i]).PnlTop.BevelOuter := bvNone;
TFrame_ButtonTest(Frame[i]).PnlTop.BevelWidth := 1;
end;
TFrame_ButtonTest(Frame[tmpIdx]).IsSelected := True;
TFrame_ButtonTest(Frame[tmpIdx]).PnlTop.BevelOuter := bvRaised;
TFrame_ButtonTest(Frame[tmpIdx]).PnlTop.BevelWidth := 3;
LblFramesAktiv.Caption := Format('
Aktiver Frame: %s', [TFrame_ButtonTest(Frame[tmpIdx]).
Name]);
except
on e:
Exception do
begin
ShowMessage(Format('
Fehler in FrameClick(): %s', [e.
Message]));
end;
end;
end;
end;
Wieso brauchst Du
den Frame als globale Variabel? Du hast doch zur Laufzeit n Frames?