Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Dynamisch erzeugte Panels und Controls (https://www.delphipraxis.net/128799-dynamisch-erzeugte-panels-und-controls.html)

Cosamia 6. Feb 2009 11:30


Dynamisch erzeugte Panels und Controls
 
Hallo zusammen,

ich habe mal wieder ein kleines Problem.

Ich erzeuge mit einer ObjectList eine flexible Anzahl von Panels, mit darauf liegenden SpinButtons und Editboxen.
Jetzt habe ich das Problem, dass in dem SpinButton Event nicht die dazugehörige Editbox finde.

Hatt mit jemand eine Idee, wie das in Griff bekommen könnte?

anbei mal der Code, wie ich die Panels etc. erstelle:

Delphi-Quellcode:
   {Instanz einer ObjectList erstellen}
   MyControls := TObjectList.Create(true);



  {Visiualisierung starten}
  for n := 0 to high(Mydata) - 1 do begin

      {Panel malen}
      NewPanel := TJvPanel.Create(BOT_BEST_PANEL);
      with NewPanel do begin
        Top := YPOS;
        Left := XPOS + (n * (intPanelWidth + intPanelOffsetX));
        Width := intPanelWidth;
        Height := intPanelHeight;
        Parent := BOT_BEST_PANEL;
        ParentBackground := true;

      end;

      {Edit malen}
      NewEdit := TLabeledEdit.Create(NewPanel);
      with NewEdit do begin
        Top    := EDITYPOS;
        Left   := EDITXPOS;
        Width  := EDITWidth;
        Height := EDITHeight;
        Parent := NewPanel;
        Editlabel.Caption := mydata[n].caption;
        text   := FloatToStr(mydata[n].default);
      end;

      {SpinButton malen }
      NewSpinBtn := TJvSpinbutton.Create(NewPanel);
      with NewSpinBtn do begin
        Top    := SPINBTNYPOS;
        Left   := (XPOS+intPanelWidth)-(EDITXPOS+SPINBTNWidth);
        Width  := SPINBTNWidth;
        Height := SPINBTNHeight;
        Parent := NewPanel;
        OnBottomClick := MyBottomClick;
        OnTopClick   := MyTopClick;
      end;
Danke

Mavarik 6. Feb 2009 11:41

Re: Dynamisch erzeugte Panels und Controls
 
Zitat:

Zitat von Cosamia
Delphi-Quellcode:
      {SpinButton malen }
      NewSpinBtn := TMyJvSpinbutton.Create(NewPanel);
      with NewSpinBtn do begin
        Top    := SPINBTNYPOS;
        Left   := (XPOS+intPanelWidth)-(EDITXPOS+SPINBTNWidth);
        Width  := SPINBTNWidth;
        Height := SPINBTNHeight;
        Parent := NewPanel;
        EditBox := NewEdit; // <---
        OnBottomClick := MyBottomClick;
        OnTopClick   := MyTopClick;
      end;

Neue Komponente TMyJvSpinbutton mit einem Link zur EditBox erzeugen!

Grüsse Frank :coder:

nahpets 6. Feb 2009 11:42

Re: Dynamisch erzeugte Panels und Controls
 
Hallo,

so in etwa könnte es gehen:
Delphi-Quellcode:
 
procedure TForm1.MyTopClick(Sender: TObject);
Var i : Integer;
begin
  If Sender is TJvSpinbutton then with Sender as TJvSpinbutton do begin
    for i := 0 To Parent.ControlCount - 1 do begin
      If Parent.Controls[i] Is TLabeledEdit then begin
        ShowMessage('Da ist er ja: ' + Parent.Controls[i].Name);
      end;
    end;
  end;
end;

KrasserChecker 6. Feb 2009 11:44

Re: Dynamisch erzeugte Panels und Controls
 
Dafür gibt es die Eigenschaft "Tag".
Einfach beim Spinedit den Zeiger auf das Editfeld eintragen und bei Bedarf wieder auslesen:

Beim Initialisieren:
Delphi-Quellcode:
with NewSpinBtn do begin
...
Tag := Integer(NewEdit);
...
end;
Dann später im Event:
Delphi-Quellcode:
procedure TForm1.MyBottomClick(Sender: TObject);
begin
...
  TLabeledEdit(Pointer((Sender as TJvSpinbutton).Tag))).Text := IntToStr((Sender as TJvSpinbutton).Value);
...
end;

Cosamia 6. Feb 2009 11:45

Re: Dynamisch erzeugte Panels und Controls
 
Ok, mit einem Link.

Dann schaue ich mir das mal an.

Oder kannst du mir das kurz erklären. Wäre nett.

Danke.

Cosamia 6. Feb 2009 11:55

Re: Dynamisch erzeugte Panels und Controls
 
Zitat:

Zitat von KrasserChecker
Dafür gibt es die Eigenschaft "Tag".
Einfach beim Spinedit den Zeiger auf das Editfeld eintragen und bei Bedarf wieder auslesen:

Beim Initialisieren:
Delphi-Quellcode:
with NewSpinBtn do begin
...
Tag := Integer(NewEdit);
...
end;
Dann später im Event:
Delphi-Quellcode:
procedure TForm1.MyBottomClick(Sender: TObject);
begin
...
  TLabeledEdit(Pointer((Sender as TJvSpinbutton).Tag))).Text := IntToStr((Sender as TJvSpinbutton).Value);
...
end;

Vielen Dank. Funktioniert wunderbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz