AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi eine zur Laufzeit erstellte Komponente unterordnen
Thema durchsuchen
Ansicht
Themen-Optionen

eine zur Laufzeit erstellte Komponente unterordnen

Ein Thema von isocam · begonnen am 15. Jun 2004 · letzter Beitrag vom 16. Jun 2004
Antwort Antwort
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#1

eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 16:13
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:
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;
Wenn in der Zeile mit dem Kommentar statt self panel2 oder panel2.parent hinschreibe , sind die Bildchen gar nicht mehr zu sehen.
Alex
  Mit Zitat antworten Zitat
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#2

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 16:16
Hat sich erledigt. Ich muss bei setbounds einen anderen Wert für top eintragen.
Alex
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#3

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 16:17
aber parent = self


bringt doch nichts..?
Nico Müller
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 16:38
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:

Parent := Form1; und würde damit das gleiche erreichen.

Parent gibt an relativ zu welcher Komponente Positionsangaben zu verstehen sind.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#5

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 16:55
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?
Nico Müller
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 18:13
Moin Nicodius,

kommt drauf an, in welchem Sinne es etwas bringen soll.
Im Falle von

Parent := Panel1; wäre evtl. die Anpassung von SetBounds nicht notwendig gewesen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#7

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 15. Jun 2004, 18:37
Zitat:
Im oben genannten Beispiel könnte man also auch schreiben:

Delphi-Quellcode:
Source:
Parent := Form1;

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.

wobei es wohl zu 95% egal wäre.....

Roderich
  Mit Zitat antworten Zitat
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#8

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 16. Jun 2004, 14:31
In meinem Fall müsste ich minibild.parent:=panel2 schreiben.

@roderich: Könntest du mir bitte deinen letzten Beitrag erklären?
Alex
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: eine zur Laufzeit erstellte Komponente unterordnen

  Alt 16. Jun 2004, 15:21
Moin Roderich,

Zitat von roderich:
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.
das ist natürlich richtig, ich wollte nur verdeutlichen, was self zu bedeuten hat.

@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

Application.CreateForm(TForm1, Form1); 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).
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:05 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