Class TNotebook und Tpage

Rund um die LCL und andere Komponenten
Antworten
khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Class TNotebook und Tpage

Beitrag von khh »

hallo zusammen,
ich habe eine Klasse TmyNotebook die von TNotebook abgeleitet ist.
Das Objekt wird im Programm zur Laufzeit in bestimmten Abhängigkeiten erstellt.
Ich würde jetzt gerne meinem TMyNotebook in einer privaten Funktion in der Klasse TmyNotebook selbst einige Elemente Tpage hinzufügen.
Ich erstelle die page mit:
myPage := TPage.create(self);

die Zuweisung
mypage.Parent:= TMyNotebook;

führt zu folgendem Fehler:
Incompatible type for arg no. 1: Got "Class Of TMyM1Notebook", expected "TWinControl"

wen muss ich da als parent zuweisen, oder funktioniert das ganz anders?

Danke für eure Info

Gruss KH

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Die Fehlermeldung ist ziemlich eindeutig.
Du musst eine Instanz als Parent zuweisen, nicht eine Klasse.
Also z.B: mypage.Parent:= MyNotebook1; (nicht TMyNotebook)

Ob das aber das einzige Problem bei deinem Vorhaben ist, kann ich nicht sagen.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo Theo,
danke für deine Antwort.
Was die Fehlermeldung bedeuted ist mir klar.
Ich wollte ja in der Klasse TmyNotebook eine Page erstellen und quasi die Klasse selbst als parent zuweisen.
das scheint aber so nicht zu gehen :-(
Also nochmal zur Verdeutlichung:
ich möchte eine Klasse MyPannel erstellen die während der Laufzeit eine variable anzahl von seiten erhält.
Wie sonst kann ich das machen ?

Gruss KH
Aber wie kann ich das sonst machen ?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Wenn ich es richtig verstehe möchtest du eine neue Seite zum Notebook hinzufügen.

Das könntest du z.b. so machen:

Code: Alles auswählen

procedure AddPage(const aCaption:String);
var
  tab:TTabSheet;
begin
  tab:=TTabSheet.Create(?);
  tab.parent:=NoteBook1  
end;
Das sollte eigentlich schon reichen.

Wenn du jetzt eine oder mehrer Komponenten hinzufügen möchtest könntest du es so machen:

Code: Alles auswählen

procedure addButton;
var
  Button:TButton;
  sheet:TTabSheet;
begin
  // damit wird der Letzte TabSheet geholt der hinzugefügt wurden ist.
  // Einfach währe es natürlich das in der Procedure AddPage zu machen, aber so geht es auch(sollte)
  sheet:=NoteBook1.Items[NoteBook1items.Count-1]
  Button:=TButton.create(Sheet);
  button.Caption:='Hallo';
  // Den Parent sollte immer zu letzt gesetzt werden
  button.parent:=Sheet
end;
Kann sein das es Items nicht gibt dann müsstest du Pages versuchen. Aber so in Etwa sollte es gehen.
Auch mit anderen Komponenten wie z.b. einem Panel.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

khh hat geschrieben: Ich wollte ja in der Klasse TmyNotebook eine Page erstellen und quasi die Klasse selbst als parent zuweisen.
Schon mal was von "Self" Parameter gehört?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Stimmt. Mit self wird die Klasse selber gemeint. Und zugweisen wenn die Klassen Kompatibel sind.
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo Michael,
ja das hast du richtig verstanden.
Ich wollte es aber so machen, dass ich eine Klasse TNotebook erstelle, die die Sheets schon enthält.
Hintergrund ist der, dass die Anzahl sheets variiert und ich dachte ich erstelle einfach ne Klasse die in abhängigkeit von bestimmten Einstellungen seine Sheets in variabler Anzahl quasi selbst hinzufügen kann.


Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

Schon mal was von "Self" Parameter gehört?
danke , funktioniert mit self, wobei ich vorher gedacht hatte, dass self sichauf das neue Element bezieht.
z.B : myPage := TPage.create(self);
die Zuweisung :
mypage.Parent:= self;
funktioniert aber tatsächlich :)

Danke Gruss KH

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

"In jeder Methode deklariert Delphi die Variable Self als versteckten Parameter. Der Bezeichner Self verweist in der Implementierung einer Methode auf das Objekt, in dem die Methode
aufgerufen wird."

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

ich danke euch

Gruss Kh

Antworten