Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamische buttonerzeugung zur laufzeit (https://www.delphipraxis.net/128213-dynamische-buttonerzeugung-zur-laufzeit.html)

5etH 26. Jan 2009 12:27


dynamische buttonerzeugung zur laufzeit
 
Hallo Zusammen,

ich würde gerne einige bis viele Buttons zur laufzeit erstellen. Leider sind meine Bisherigen versuche gescheitert, da ich garnicht weis wo ich anfangen soll :-(

do ich mit diesem code
Delphi-Quellcode:
 button2.Create(form1);
   move(button2);
ja immer nur ein und denselben button erzeuge

ich hoffe ihr könnt mir weiter helfen

Gruß
Manu

LuCSteR 26. Jan 2009 12:31

Re: dynamische buttonerzeugung zur laufzeit
 
http://www.delphi-treff.de/tutorials...eit-erstellen/

Vll kommst du damit weiter :)

5etH 26. Jan 2009 13:03

Re: dynamische buttonerzeugung zur laufzeit
 
das hat mir schonmal weiter geholfen... jetzt würde ich gerne alle Buttons in eine List speichern (TComponentList) und diese an eine eigene Procedur weitergeben nur leider hagelt es dort weil ich in der Procedur explizit mit Buttons arbeite aber es keine Buttonlist gibt

hier einmal die Code Fragmente zur Verdeutlichung
Delphi-Quellcode:

procedure move(btn : TButton); // Verlang TButton
var I : Integer;
begin
  btn.Top := 64;
btn.Left := 0;
for I := 0 to 100 do
begin
application.ProcessMessages;
  btn.Left := i;
end;

for I := 64 to 270 do
  begin
    btn.Top := i;
    application.ProcessMessages;
  end;
//....
        btn.Destroy;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  btnNeu: TButton;
begin
  btnlist := TComponentlist.Create( false ); //Componentlist
  for I := 0 to 20 do
    begin
      btnlist.Add(btnneu.Create(self)); //Erzeugte buttons in Liste schreiben
        with btnNeu do
          begin
          Name := 'btn'+IntToStr(i);
          width := 20;
          height := 20;
          Parent := self;
          caption := '';
          end;
    end;
  for I := 0 to btnlist.Count -1 do
    begin
    move(btnlist[i]); // Beim übergeben an die Procedure meckert er, weil Component und nicht Button
    sleep(500);
    end;
end;

Luckie 26. Jan 2009 13:13

Re: dynamische buttonerzeugung zur laufzeit
 
Zitat:

Zitat von 5etH
nur leider hagelt es dort

Warum hast du Wetterphänomen in deinem Quelltext? Desweiteren erhöhen Satzzeichen an der richtigen Stelle und richtig angewandte Rechtschreibung und Grammatik, die Lesbarkeit und das Verständnis enorm.

Ich kann erstmal so keinen Fehler in deinem Quelltext sehen. Wo treten, wann, welche Fehler auf?

5etH 26. Jan 2009 14:12

Re: dynamische buttonerzeugung zur laufzeit
 
Tut mir Leid wegen der Rechtschreibung aber ich war etwas in eile also Fehler sind jetzt im Quelltext gekennzeichnet und dem Verständniss wegen werde ich ihn auch hier nochmal Erläutern.

Ich würde gerne alle Buttons in eine Componentlist schreiben was ja auch soweit funktioniert... so jetzt zum Problem

in der Procedur "move" habe ich als Parameter einen TButton, da ich dort mit Top und Left arbeiten will. Jetzt meckert aber der Compiler, da ich eine Componentlist übergeben will, wo er eigentlich Buttons erwartet.

Ich hoffe das ich es damit etwas verdeutlich konnte.

Gruß
Manuel

Relicted 26. Jan 2009 14:14

Re: dynamische buttonerzeugung zur laufzeit
 
Huhu,

versuch mal:

Delphi-Quellcode:
....
  for I := 0 to btnlist.Count -1 do
  begin
    move( ( btnlist[i] as TButton ) );
    sleep(500);
  end;
oder:

Delphi-Quellcode:
....
  for I := 0 to btnlist.Count -1 do
  begin
    move( TButton( btnlist[i] ) );
    sleep(500);
  end;
gruß
reli


edit:

achja und änder mal diese zeilen hier:
Delphi-Quellcode:
btnlist.Add(btnneu.Create(self)); //Erzeugte buttons in Liste schreiben
with btnNeu do
begin
  Name := 'btn'+IntToStr(i);
  width := 20;
  height := 20;
  Parent := self;
  caption := '';
end;
in diese:

Delphi-Quellcode:
with btnList[ btnlist.Add(TButton.Create(self)) ] as TButton do //Erzeugte buttons in Liste schreiben
begin
  Name := 'btn'+IntToStr(i);
  width := 20;
  height := 20;
  Parent := self;
  caption := '';
end;

bluescreen25 26. Jan 2009 14:41

Re: dynamische buttonerzeugung zur laufzeit
 
Bin mir noch nicht ganz sicher was du genau willst, aber hier mal ein Bsp:
Warum willst du die Buttons nicht direkt an ihren Platz setzen ?

Delphi-Quellcode:
var
  Form1: TForm1;
  ObjektButton : TObjectList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var newButton: TButton;
    Index : Integer;
begin
  ObjektButton := TObjectList.Create(true);

  for Index := 0 to 10 do
  begin
  newButton := TButton.Create(Form1);
      with newButton do
      begin
        Parent := Form1;
        Tag   := Index;
        Name  := 'newButton' + IntToStr(Index);
        Caption:= 'newButton' + IntToStr(Index);
        SetBounds(0, Index * 30,100,30);
      end;
  ObjektButton.Add(newButton);
  end;
end;
Gruß, bluescreen

5etH 26. Jan 2009 14:43

Re: dynamische buttonerzeugung zur laufzeit
 
Cool DANKE!!

das hat super Funktioniert ^^ nur leider fällt mir jetzt auf, dass ich die Prozedur move in einem Thread Starten muss, weil sie mehrfach hintereinander ausgeführt werden muss.

Kurz: Das Programm soll nicht warten bis Move fertig ist.

Leider habe ich von Threads keine Ahnung. Kennt ihr ein gutes TUT oder gibts da eine Andere Möglichkeit

LuCSteR 26. Jan 2009 14:46

Re: dynamische buttonerzeugung zur laufzeit
 
Auch hier wärest du bei Delphi-Treff fündig geworden ;)

http://www.delphi-treff.de/tutorials...hreads/page/1/

Luckie 26. Jan 2009 15:06

Re: dynamische buttonerzeugung zur laufzeit
 
Das macht keinen Sinn. Um auf VCL Objekte des (Haupt)threads zu greifen zu können musts du den Thread synchronisieren. Und damit wird die Positionierung doch wieder im Kontext des Hauptthreads ausgeführt.

Darf man mal dumm fragen, um wieviele Schaltflächen es geht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Seite 1 von 2  1 2      

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