Entwickler-Ecke
Sonstiges (Delphi) - Komponente zur Laufzeit kopieren
Chatfix - Sa 03.04.04 13:01
Titel: Komponente zur Laufzeit kopieren
Mich beschäftigt zur Zeit ein Problem für das ich keine Lösung habe...
Folgendes: ich habe ein ListView (Entwicklungszeit).
In diesem werden Dateien von mir verwaltet.
Die Dateien werden beim start eingelesen und es wird der im Header befindliche "Kategorie"-Teil ausgelesen.
Nun wollte ich immer wenn eine neue Kategorie gefunden wurde einen Tab machen, und auf diesem ein ListView erstellen, der komplett ALLE eigenschaften und Ereignisse hat wie das ListView das ich zur Entwicklungszeit angelegt habe.
Der erste ListView von der Entwicklungszeit ist immer, weil dieser alle Dateien auflisten sollen, und dann die weiteren Tabs um die einzelnen Kategorien auszuwählen.
Ich hoffe ihr versteht was ich meine.
Danke schonmal im vorraus!
catweasel - Sa 03.04.04 13:15
Naja, erstelle einen neuen ListView Typ mit allen Eigenschaften die du so brauchst und weis alle nötigen Ereignisse zu...
Da kannst du beliebig viele von erstellen die alle "gleich" sind......
Und dann erstellst du eben auch den ersten Listview zur Laufzeit....
Catweasel
Chatfix - Sa 03.04.04 13:24
Kannst du mal bitte ein Beispiel posten, mit einer Eigenschaft, und einem ereignis?
Christian S. - Mo 05.04.04 15:29
Hallo!
Wo hakt es denn genau?
MfG
Peter
Chatfix - Mo 05.04.04 15:32
Nunja, die Lösung von Catweasel gefällt mir ganz gut, nur habe ich noch nie eine Komponente als neuen Typ angelgt, deswegen habe ich nach einem Beispiel gefragt, mit einer Eigenschaft und einem Ereignis... den Rest dürfte ich dann schon hinbekommen...
Christian S. - Mo 05.04.04 15:40
Okay. Folgendes erstellt einen neuen Button zur Laufzeit mit einem OnClick-Ereignis:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| type TmyButton = class(TButton) procedure Button2Click(Sender: TObject); private public constructor create(AOwner : TComponent); end;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject);
private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
constructor TmyButton.create(AOwner : TComponent); begin inherited; self.width := 150; self.height := 150; self.Caption := 'identischer Button'; self.OnClick := self.Button2CLick; end;
procedure TmyButton.Button2Click(Sender: TObject); begin ShowMessage('Click'); end;
procedure TForm1.Button1Click(Sender: TObject); var myButton : TmyButton; begin myButton := TmyButton.Create(self); myButton.Parent := Form1; end; |
Chatfix - Mo 05.04.04 15:43
Wenn ich jetzt mehrere Buttons erstelle, kann ich dann hier
Delphi-Quelltext
1: 2: 3: 4:
| procedure TmyButton.Button2Click(Sender: TObject); begin ShowMessage('Click'); end; |
auch rausbekommen, welcher button das ereignis ausgelöst hat?
maximus - Mo 05.04.04 15:49
Ja...dafür ist der sender da!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TmyButton.Button2Click(Sender: TObject); begin ShowMessage(TComponent(Sender).name+'Click'); if sender = Button2 then ... else if sender = Button3 then ...; end; |
Motzi - Mo 05.04.04 15:49
Ja.. einfach über den Parameter Sender..! Sender ist immer eine Referenz zum aufrufenden Objekt...!
Chatfix - Mo 05.04.04 15:53
OK danke, werde das nachher zuhause gleich mal probieren :)
Vielen Dank nochmal, und sorry fürs schieben...
Chatfix - Mo 05.04.04 19:00
Es funktioniert soweit ganz gut, hab nur noch ein problem...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| type TBlahList = class(TListView) private public constructor create(AOwner: TComponent); end;
constructor TBlahList.create(AOwner : TComponent); var i: Integer; begin inherited; Self.Parent := Form1.TabSheet2; Self.Align := Form1.ListView1.Align; Self.OnInfoTip := Form1.ListView1InfoTip; for i := 0 to Form1.ListView1.Columns.Count - 1 do begin Self.Columns.Add; Self.Columns.Items[i].Alignment := Form1.ListView1.Columns.Items[i].Alignment; Self.Columns.Items[i].AutoSize := Form1.ListView1.Columns.Items[i].AutoSize; Self.Columns.Items[i].Caption := Form1.ListView1.Columns.Items[i].Caption; Self.Columns.Items[i].Width := Form1.ListView1.Columns.Items[i].Width; Self.Columns.Items[i].ImageIndex := Form1.ListView1.Columns.Items[i].ImageIndex; Self.Columns.Items[i].MaxWidth := Form1.ListView1.Columns.Items[i].MaxWidth; Self.Columns.Items[i].MinWidth := Form1.ListView1.Columns.Items[i].MinWidth; Self.Columns.Items[i].Tag := Form1.ListView1.Columns.Items[i].Tag; Self.Columns.Items[i].Width := Form1.ListView1.Columns.Items[i].Width; end; end; |
Das ListView wird zwar erstellt, aber die columns werden nicht übernommen...
Leider funzt
Self := Form1.listView1 nicht, so muss ich alle eigenschaften ändern...
Motzi - Mo 05.04.04 20:10
Probiers mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| type TBlahList = class(TListView) private public constructor create(AOwner: TComponent); end;
constructor TBlahList.create(AOwner : TComponent); var i: Integer; aColumn: TListColumn; begin inherited; Self.Parent := Form1.TabSheet2; Self.Align := Form1.ListView1.Align; Self.OnInfoTip := Form1.ListView1InfoTip; for i := 0 to Form1.ListView1.Columns.Count - 1 do begin aColumn := Self.Columns.Add; with Form1.ListView1.Columns.Items[i] do begin aColumn.Alignment := Alignment; aColumn.AutoSize := AutoSize; aColumn.Caption := Caption; aColumn.ImageIndex := ImageIndex; aColumn.MaxWidth := MaxWidth; aColumn.MinWidth := MinWidth; aColumn.Tag := Tag; aColumn.Width := Width; end; end; end; |
Chatfix - Di 06.04.04 09:58
Da hätte ich auch selbst drauf kommen können...
Danke :)
Chatfix - Di 06.04.04 20:07
Ich hab mich wohl zu früh gefreut...
Leider funktioniert das auch nicht :cry:
Ich bin doof... klappt doch, hatte den ViewStyle nicht eingestellt :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!