AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi dynamische buttonerzeugung zur laufzeit

dynamische buttonerzeugung zur laufzeit

Ein Thema von 5etH · begonnen am 26. Jan 2009 · letzter Beitrag vom 26. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#1

dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 12:27
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
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#2

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 12:31
http://www.delphi-treff.de/tutorials...eit-erstellen/

Vll kommst du damit weiter
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#3

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 13:03
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;
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 13:13
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#5

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 14:12
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
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 14:14
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;
  Mit Zitat antworten Zitat
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 14:41
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
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
Benutzerbild von 5etH
5etH

Registriert seit: 4. Mär 2008
Ort: Giessen
217 Beiträge
 
Delphi 2007 Professional
 
#8

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 14:43
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
Manuel
Lieber heimlich schlau als unheimlich dumm
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#9

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 14:46
Auch hier wärest du bei Delphi-Treff fündig geworden

http://www.delphi-treff.de/tutorials...hreads/page/1/
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: dynamische buttonerzeugung zur laufzeit

  Alt 26. Jan 2009, 15:06
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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