Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mehrerere Objekte zur Laufzeit erstellen (https://www.delphipraxis.net/179320-mehrerere-objekte-zur-laufzeit-erstellen.html)

Luki206 26. Feb 2014 17:50

Mehrerere Objekte zur Laufzeit erstellen
 
Hi, ich weiß zwar wie ich z.B. Buttons zur Laufzeit erstelle aber weiß ich nicht wie ich mehr als nur ein Button erstellen kann. Mein Anliegen ist volgendes: jeder kennt ja die Musik Mediathek vom Win Mediaplayer oder von iTunes und so möchte ich das auch machen das man auch mehr Lieder in eine Album Zeile schreiben kann. Wüsste jemand wie ich das machen könnte? Weil da habe ich jetzt keine Anhung da ich Objekte noch nur zur Laufzeit erstellt habe.
Danke
Luki :)

DeddyH 26. Feb 2014 17:57

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Was denn für Objekte? Komponenten oder ganz andere? Im Prinzip geht das so (ich geh mal davon aus, dass es sich nicht um Komponenten handelt):
Delphi-Quellcode:
//FObjects soll ein privates Feld vom Typ TObjectList sein
procedure TSomeForm.CreateSeveralObjects(CountObjects: integer);
var
  i: integer;
  Obj: TSomeObject;
begin
  for i := 1 to CountObjects do
    begin
      Obj := TSomeObject.Create;
      //Irgendwelche Eigenschaften setzen
      Obj.SomeProp := 42;
      FObjects.Add(Obj);
    end;
end;
Wenn später die Objektliste freigegeben wird, werden (in der Standardeinstellung OwnsObjects auf true) auch die enthaltenen Objekte mit freigegeben.

michaelthuma 26. Feb 2014 18:17

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ganz klar ist es mir nicht. Machen wir mal Ein Panel einfügen und mehrer Buttions drauf.

Delphi-Quellcode:
var
  lBtn : TButton;
  lPanel : TPanel;
  lActRight : Integer;
begin
  (* Panel *)
  lPanel := TPanel.Create(self);
  lPanel.Align:=TAlign.alBottom;
  self.InsertControl(lPanel);

  (*Button 1*)
  lBtn := TButton.Create(self);
  lBtn.Caption:='Eins';
  self.InsertControl(lBtn);
  lBtn.Parent:=lPanel;
  lActRight := lBtn.Left + lBtn.Width;
 
  (*Button 2*)
  lBtn:=TButton.Create(self);
  lBtn.Caption:='Zwei';
  lBtn.Left:=lActRight + 3;
  self.InsertControl(lBtn);
  lBtn.Parent:=lPanel;
  lActRight := lBtn.Left + lBtn.Width;
 
  (*Button 3*)
 
  lBtn:=TButton.Create(self);
  lBtn.Caption:='Zwei';
  lBtn.Left:=lActRight + 3;
  self.InsertControl(lBtn);
  lBtn.Parent:=lPanel;
end;
Das ist jetzt nicht der Heuler ... aber schauen wir mal. Kann man ruhig eine Schleife bauen ... nach dem Panel.


Zitat:

Zitat von Luki206 (Beitrag 1249746)
Hi, ich weiß zwar wie ich z.B. Buttons zur Laufzeit erstelle aber weiß ich nicht wie ich mehr als nur ein Button erstellen kann. Mein Anliegen ist volgendes: jeder kennt ja die Musik Mediathek vom Win Mediaplayer oder von iTunes und so möchte ich das auch machen das man auch mehr Lieder in eine Album Zeile schreiben kann. Wüsste jemand wie ich das machen könnte? Weil da habe ich jetzt keine Anhung da ich Objekte noch nur zur Laufzeit erstellt habe.
Danke
Luki :)


Popov 26. Feb 2014 18:27

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1249748)
Wenn später die Objektliste freigegeben wird, werden (in der Standardeinstellung OwnsObjects auf true) auch die enthaltenen Objekte mit freigegeben.

Je nachdem welches Delphi man hat, ist die Eigenschaft OwnsObjects nicht sonderlich verbreitet. Bei Delphi 7 ist es gerade mal nur in TObjectList, spätere Versionen wurden aktualisiert, z. B. TStringList usw.

Ist nur ein Hinweis für die, die noch ein altes Delphi haben. Da TE aber XE5 hat, sollte das kein Problem sein.

Luki206 27. Feb 2014 10:09

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ok danke, nur die Oberfläche vom Windows Media Player ist ja Scrollbar (nicht Scrollbar sondern Scroll-bar ;) ) und jetzt weiß ich nicht wie ich das dann mit den Scrollbar's machen soll das diese mein Fenster nach untenraus erweitern, weil wenn man ja mehr als Zehn mal: Button, Label und Bevel dann erzeugt hat kommt man ja an ein Limit. Oder ja auch noch ein Beispiel von iTunes. Apple hat ja das Coverflow zu dieser neuen Ansicht getauscht und das ist ja auch 'erweiterbar' mit Lieder.
Danke
Luki :)

Sir Rufo 27. Feb 2014 11:19

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Wenn du das nicht vernünftig beschreiben kannst, dann mach einen Screenshot, kringel das ein was du meinst und schreib "das da" dran

Perlsau 27. Feb 2014 11:36

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Luki206:

Wenn ich dich richtig verstehe, möchtest du das erreichen, was ich im Bild unten darstelle. In der zugehörigen Anwendung werden Objekte zusammengestellt (ein TImage und eine TCheckBox) und jeweils als ein zusammengehöriges Objekt zur Laufzeit erzeugt. Dazu habe ich mir eine eigene Klasse geschrieben, die die Objekte erzeugen und auch wieder freigeben kann. Die Objekte landen nach Erzeugung in einer TObjectList.

In der ScrollBox befindet sich ein TPanel, das in der Breite jeweils der Breite des ScrollBox-Clientbereichs angepaßt wird. Die Höhe richtet sich danach, wie viele Objekte auf dem Panel dargestellt werden sollen. Dabei berechne ich aus der Breite und Höhe der Objekte und aus dem horizontalen und vertikalen Abstand, wie viele Objekte auf eine "Zeile" passen und wie viele "Zeilen" ich benötige. Aus dem letztgenannten Wert ergibt sich die Höhe des Panels.

Luki206 27. Feb 2014 13:48

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Tut mir leid wegen den spärlichen Infos nur war ich heute morgen in der Schule etwas verpeilt :mrgreen: @Perlsau Ja genau so etwas meine ich Danke :) ;)

Perlsau 27. Feb 2014 13:50

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Na, dann komm doch mal auf die helle Seite, dann siehst du erstens besser und blickst auch besser durch. Immerhin, jetzt weißt du ja, wie's geht.

Luki206 27. Feb 2014 14:14

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Haha, ja ok, danke :D ;)

Luki206 27. Feb 2014 14:34

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Wie bekomme ich bei der ScrollBox diesen nach innen Wölb Effekt weg? Mit fällt gerade der Name nicht ein aber mit BevelInner, -Outer und -Kind bekomme ich ihn nicht weg. Alles steht auf none

DeddyH 27. Feb 2014 14:36

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Was für' n Effekt? Zeig mal einen Screenshot.

Luki206 27. Feb 2014 14:54

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Den:
Also wie mit dem Panel der Effekt und der stört mich..

DeddyH 27. Feb 2014 14:55

AW: Mehrerere Objekte zur Laufzeit erstellen
 
BorderStyle auf bsNone hilft nicht?

Luki206 27. Feb 2014 15:00

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Doch! Danke ;)

Luki206 27. Feb 2014 15:32

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ok nochmal ein Problem. Ich kann kein TImage erzeugen bzw. es kommt nach TImage. keine Auswahlhilfe.. hier mein Code bis jetzt:
Delphi-Quellcode:
procedure TFrmHaupt.BtnObjektClick(Sender: TObject);
var LImg: TImage;
LLbl: TLabel;
begin
  Limg := TImage.
end;
Edit: Halt, Fehler gefunden.. TObjectList wird mir als unbekannt angezeigt, muss ich noch was zu uses hinzufügen?

DeddyH 27. Feb 2014 15:38

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Contnrs

Luki206 27. Feb 2014 15:58

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ok danke ;)

Perlsau 27. Feb 2014 16:17

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Zitat:

Zitat von Luki206 (Beitrag 1249894)
Ok nochmal ein Problem. Ich kann kein TImage erzeugen bzw. es kommt nach TImage. keine Auswahlhilfe.. hier mein Code bis jetzt:
Delphi-Quellcode:
procedure TFrmHaupt.BtnObjektClick(Sender: TObject);
var LImg: TImage;
LLbl: TLabel;
begin
  Limg := TImage.
end;
Edit: Halt, Fehler gefunden.. TObjectList wird mir als unbekannt angezeigt, muss ich noch was zu uses hinzufügen?

Du erzeugst hier ein TImage und weist es der lokalen Variablen LImg zu. Diese steht aber nach Beenden der Procedure nicht mehr zur Verfügung. Wieso machst du's nicht, wie ich dir geraten hatte? Entwickle dir eine Klasse, mit der du die Objekte erzeugst. Die Zeiger auf die erzeugten Objekte verwaltest du dann in einer Objektliste.

Dein hier gezeigter Code hat überhaupt nichts mit einer Objektliste zu tun ?!?

DeddyH 27. Feb 2014 16:33

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Nur komisch, dass ich es hier auch so mache.

Perlsau 27. Feb 2014 16:36

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Was ist daran komisch: du fügst das erzeugte Objekt einer nicht lokal deklarierten Objektliste hinzu. Davon ist im Code oben aber nichts zu sehen.

DeddyH 27. Feb 2014 17:07

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Klar, weil er bislang erst den gezeigten Code getippt und sich gewundert hat, dass die Codevervollständigung nicht funktioniert. Das steht doch so in der Frage.

Luki206 28. Feb 2014 06:57

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ja, das war auch nur ein kleiner Test ;) Nochmal zu meiner Idee: Ich habe mir jetzt auch gedacht einfach nur vier Panels mit Labels und einem Button zu füllen und noch eine Scrollbar auf mein Formular setzte die dann bei jedem scrolllen dann die Caption's der Labels entweder ein Panel nach unten schiebt oder eins nach oben. Das mit der Scrollbar ist aber auch nur so wenn man mehr als vier Lieder verlinkt hatte sollte diese dann erscheinen. Ist das gut oder soll ich's mit den Objekten versuchen die zur Laufzeit zu erstellen? ;)

DeddyH 28. Feb 2014 07:08

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ich persönlich kann mir überhaupt nicht vorstellen, wie das letztendlich aussehen soll. Du scrollst und die Beschriftungen ändern sich dynamisch? Zum Einen ist der Scrollbalken dann immer geich hoch, egal wieviele Daten Du verwalten willst und zum Anderen stelle ich mir gerade diese Verwaltung sehr umständlich vor. Da würde ich eher beim dynamischen Erzeugen bleiben, aber das ist nur meine persönliche Meinung.

Luki206 1. Mär 2014 18:43

AW: Mehrerere Objekte zur Laufzeit erstellen
 
Ok, nur ich habe jetzt einen anderen weg gefunden ;)ich lade mal das 'fertige' Projekt hoch wenn ich's dann schlicht weg zum laufen gebracht habe :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 Uhr.

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