![]() |
eine zur Laufzeit erstellte Komponente unterordnen
Hallo,
In meinem Programm soll es eine Bildvorschau geben. Ein Bild wird geladen und in der Vorschau werden alle anderen Bilder im Miniformat angezeigt, die im gleichen Verzeichnis sind. Soweit so gut. Aber: Wie kann ich diesen Film aus kleinen Bildchen in einem Panel platzieren? Mein Ansatz:
Delphi-Quellcode:
Wenn in der Zeile mit dem Kommentar statt self panel2 oder panel2.parent hinschreibe , sind die Bildchen gar nicht mehr zu sehen.
procedure TForm1.Bildladen(quelle:Integer);
var srec:TSearchRec; pfad:String; mbcounter,l:Integer; begin case quelle of 1: begin image1.picture.loadfromfile(paramstr(1)); pfad:=ExtractFilePath(paramstr(1)); end; 2: begin image1.picture.loadfromfile(openpicturedialog1.filename); pfad:=ExtractFilePath(openpicturedialog1.FileName); end; end; pfad:=pfad + '*.bmp'; mbcounter:=0; l:=5; if FindFirst(pfad , faAnyFile, srec) = 0 then begin try repeat listbox1.Items.Add(srec.Name); minibild:=TImage.Create(self); minibild.Parent:=self; //hat mein Problem mit dieser Zeile zu tun? minibild.Name:='minibild_'+InttoStr(mbcounter); minibild.SetBounds(l,420,60,60); minibild.Stretch:=true; minibild.Picture.LoadFromFile(srec.Name); Inc(l,65); Inc(mbcounter); until FindNext(srec) <> 0; finally FindClose(srec); end; end; end; |
Re: eine zur Laufzeit erstellte Komponente unterordnen
Hat sich erledigt. Ich muss bei setbounds einen anderen Wert für top eintragen. :wall:
|
Re: eine zur Laufzeit erstellte Komponente unterordnen
:mrgreen: aber parent = self
bringt doch nichts..? |
Re: eine zur Laufzeit erstellte Komponente unterordnen
Moin Nicodius,
self ist der unsichtbare Parameter innerhalb einer Methode, und gibt das Objekt an in dessen Methode man sich befindet. Im oben genannten Beispiel könnte man also auch schreiben:
Delphi-Quellcode:
und würde damit das gleiche erreichen.
Parent := Form1;
Parent gibt an relativ zu welcher Komponente Positionsangaben zu verstehen sind. |
Re: eine zur Laufzeit erstellte Komponente unterordnen
ja ich weiß ich hab ein kleines tut darüber gemacht aber parent = self brignt ja in dem fall nichts wenn ich mich nicht irre oder?
|
Re: eine zur Laufzeit erstellte Komponente unterordnen
Moin Nicodius,
kommt drauf an, in welchem Sinne es etwas bringen soll. Im Falle von
Delphi-Quellcode:
wäre evtl. die Anpassung von SetBounds nicht notwendig gewesen.
Parent := Panel1;
|
Re: eine zur Laufzeit erstellte Komponente unterordnen
Zitat:
hi Christian, sowas würde ich nicht empfehlen. Du greifst explizit auf die Instanz "Form1" zu, die 1. gar nicht erzeugt sein muß 2. bei mehreren Instanzen dieser Klasse stets in die Hose gehen würde Self zu verwenden, ist immer sauberer. :warn: wobei es wohl zu 95% egal wäre..... :-) Roderich |
Re: eine zur Laufzeit erstellte Komponente unterordnen
In meinem Fall müsste ich minibild.parent:=panel2 schreiben.
@roderich: Könntest du mir bitte deinen letzten Beitrag erklären? :wiejetzt: |
Re: eine zur Laufzeit erstellte Komponente unterordnen
Moin Roderich,
Zitat:
@isocam: In vielen Fällen werden die Standards von Delphi verwendet. Man hat also eine Klasse TForm1 und eine zugehörige Objektvariable Form1, die von der IDE automatisch erzeugt werden. Ebenso automatisch wird die Zeile
Delphi-Quellcode:
erzeugt, mit der beim Programmstart eine Instanz von TForm1 in Form1 gebildet wird, da Du nun aber diesen Automatismus nicht zwingend nutzen musst, sondern die Instanzen auch "manuell" erzeugen kannst, kannst Du auch eine andere Variable als nun gerade Form1 benutzen (1. bei Roderich).
Application.CreateForm(TForm1, Form1);
Ausserdem kannst Du auch, zusätzlich zur automatischen Erzeugung, noch weitere Instanzen von TForm1 bilden, die dann, sinnvoller Weise, nicht Form1 zugeordnet sind. Somit würde die Angabe von Form1 auf die falsch Instanz verweisen. Nimmt man hingeben immer self, so ist sichergestellt, dass immer die korrekte, existierende, Instanz von TForm1 verwendet wird, unabhängig davon, wieviele Instanzen man erzeugt hat, und wie die jeweiligen Variablen heissen (soweit man überhaupt welche verwendet hat, was ja auch nicht zwingend erforderlich ist. Spätestens, wenn Du anfängst selber Komponenten zu schreiben, in deren Methoden auf die Objektinstanz zugegriffen werden soll/muss, wirst Du feststellen, dass es auch gar nicht anders geht als self zu benutzen, denn Du kannst dann ja vorher nicht wissen, wie die Variable heissen wird, die die Instanz zugewiesen bekommt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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