Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - untererzeugt objekte


inselberg - Mo 21.04.03 14:59
Titel: untererzeugt objekte
hi,

ich erzeuge - zur laufzeit - neue tabsheets (auf einer pagecontrol).
gleichzeitig kommt auf jedes tabsheet ein memo und eine listbox.

das ist ja nicht besonders schwierig.

aber wie greif ich im nachhinein auf die die einzelnen memos/listboxen zu ?

Self.FindComponent scheint mir auch nicht der richtige wert zu sein da die memos ja alle den gleichen namen tragen, oder muss ich mir zuerst das tabsheet "suchen" (falls ja wie ?) ...


danke.


FloSch - Mo 21.04.03 16:02

Hallo,

wie du im nachinein auf die Komponenten zugreifst? Mit einem Namen.

Sobald du die Objekte dynamisch erstellst, wirst du ihnen - hoffentlich - auch einen Namen zuweisen.

Grüße
Florian :roll:


inselberg - Mo 21.04.03 20:01

lol das war aber ne klasse antwort :D

ich mach mal en codebeispiel

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var NewTabSheet: TTabSheet;
     Memo: TMemo;
   
begin
 NewTabSheet:=TTabSheet.Create(Self);
 NewTabSheet.PageControl:=PageControl1;
 NewTabSheet.Caption:=achannel.Name;

 Memo:=TMemo.Create(Self);
 Memo.Parent:=NewTabSheet;
 Memo.align:=alClient;
end;


so und nun sag mir den namen vom 12. memo ;)


FloSch - Mo 21.04.03 20:10

inselberg hat folgendes geschrieben:
lol das war aber ne klasse antwort :D


Danke :lol:

inselberg hat folgendes geschrieben:

ich mach mal en codebeispiel

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var NewTabSheet: TTabSheet;
     Memo: TMemo;
   
begin
 NewTabSheet:=TTabSheet.Create(Self);
 NewTabSheet.PageControl:=PageControl1;
 NewTabSheet.Caption:=achannel.Name;

 Memo:=TMemo.Create(Self);
 Memo.Parent:=NewTabSheet;
 Memo.align:=alClient;
end;


so und nun sag mir den namen vom 12. memo ;)


Memo.Name := 'DeinMemoName';

Zugreifen tust du dann per DeinMemoName :wink:

Grüße
Florian :roll:


Christian S. - Mo 21.04.03 20:12

Könntest Du nicht ein "Array of TTabSheet" erzeugen? Also, wenn Du 12 Tabsheets erzeugen willst, so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
VAR i : INTEGER;
   tabsheet : Array[0..11] Of TTabSheet;
begin
  for i:=0 TO 11 DO
  begin
    tabsheet[i]:=TTabSheet.Create(self);
    {...}
  end;
end;

Dann kannst Du mit TabSheet[0] bis TabSheet[11] auf die TabSheets zugreifen.

Oder aber, Du setzt bei jedem TabSheet, wenn Du es mit Deiner Methode erzeusgt, die Eigenschaft "Name" und sprichst es über FindComponent an. Dann brauchst Du das Array nicht.

MfG,
Peter


FloSch - Mo 21.04.03 20:45

Hallo,

da würde ich persönlich auf einen dynamischen Array zurückgreifen, wenn man die Anzahl nicht genau bestimmen kann, wieviel TabSheets man genau benötigt (z.b. ein Texteditor).

Grüße
Florian :roll:


Christian S. - Mo 21.04.03 20:49

Jo, ich auch. Sollte ja aber auch nur das Prinzip verdeutlichen.


inselberg - Mo 21.04.03 22:26

einen direktzugriff gibt es also nicht ... von der art
"tabsheet[x].memo"


Tino - Di 22.04.03 09:07

Hallo,

FloSch hat folgendes geschrieben:
Memo.Name := 'DeinMemoName';
Zugreifen tust du dann per DeinMemoName

Nein, das funktioniert nicht. Du hast dann nur über die Funktion FindComponent die Möglichkeit das Kontrol zu finden.

inselberg hat folgendes geschrieben:
einen direktzugriff gibt es also nicht ... von der art
"tabsheet[x].memo"

Nicht so ohne weiteres. Du könntest allerdings eine Ableitung von tTabSheet erstellen welches im Constructor die benötigten Kontrols (Memo, etc) erstellt. Über ein Property könntest Du den Zugang zu den Kontrols herstellen.

Gruß
Tino