abgeleitetes Formular

Rund um die LCL und andere Komponenten
Antworten
watte
Beiträge: 13
Registriert: Di 3. Aug 2010, 20:57

abgeleitetes Formular

Beitrag von watte »

Hallo Leute!

Ich benötige ein wenig Hilfe bei einem Problem.

Ich habe eine neue Formular-Klasse (TMySpecialForm) geschrieben. Die ist von TForm abgeleitet und hat zusätzliche (published)Eigenschaften, um sie im Objektinspektor einstellen zu können. Die neuen Eigenschaften werden nur nicht im Objektinspektor angezeigt...
Zuerst dachte ich es wäre ein Problem mit published, aber daran liegt es wohl nicht. Nach ein wenig Suchen im lazarus-quellcode, habe ich festgestellt das man, für den Menü-Eintrag "Neu..." neue Formular-Dateien anlegen kann. Gesagt-Getan... dann konnte ich in einem Projekt über "Neu..." -> MyFormular eine unit erstellen, welche meine Formular-Klasse enthält. "Super" und der Objektinspektor bietet auch meine zusätzlichen Eigenschaften an... "Super hoch 2"

Zu früh gefreut... Wenn ich mein Projekt mit den Dateien lade, bekomme ich Fehler wie 'Eigenschaft "Zusatz1" existiert nicht.' usw.
Nach einigem Debuggen der Lazarus-IDE habe ich festgestellt, dass er beim Laden der Units zwar sieht das es eine andere Formular-Klasse ist (TMySpecialForm), erstellen tut die IDE aber immer eine TForm. Und diese hat natürlich nicht meine zusätzlichen Eigenschaften.

Weiß jemand Rat?

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

Re: abgeleitetes Formular

Beitrag von theo »

Mal abgesehen davon, ob das vllt. ein Bug ist, interessiert mich immer, wie man auf solche "Bedürfnisse" kommt.
Kannst du das mal erklären? Vielleicht findet man dann auch eine Lösung.

watte
Beiträge: 13
Registriert: Di 3. Aug 2010, 20:57

Re: abgeleitetes Formular

Beitrag von watte »

Klar kann ich das erklären... Es ist ganz einfach, ich programmiere seit vielen Jahren in Delphi und habe mir in dieser zeit eine eigene, riesige Klassen-Bibliothek angesammelt. Sämtliche Dinge sind in Klassen und dann in Komponenten gelandet. Wenn ich ein neues Programm beginne, nehme ich meine Spezial-Hauptform, packe die Komponenten rein und weise diese per Mausklick zu und habe ohne eine Zeile Quelltext schon tolle Anwendungen zusammen geklickt. 8)

Nun möchte ich zu Lazarus wechseln und bin ich beim portieren auf dieses Problem gestoßen.

Ich denke nicht unbedingt das es ein Bug in der IDE ist. Ich könnte mir vorstellen das ich meine Formularklasse irgendwie in der IDE registrieren muss. Aber ich weiß leider nicht wie. :?: Oder es ist doch ein BUG :cry:

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: abgeleitetes Formular

Beitrag von DiBo33 »

Ja du musst deine Komponente in der IDE registrieren, hierzu musst du dir ein Package erstellen und dieses Package registrieren.

Schau hier mal vorbei
http://wiki.lazarus.freepascal.org/Extending_the_IDE/de" onclick="window.open(this.href);return false;

watte
Beiträge: 13
Registriert: Di 3. Aug 2010, 20:57

Re: abgeleitetes Formular

Beitrag von watte »

Danke für den Tipp DiBo!

Hm... Allerdings ist meine ganze Klassenbibliothek in einem Package und registriert auch alle Komponenten für die Komponenten-Palette. Das läuft soweit.
So wie es in deinem Link steht habe ich es auch schon probiert. Damit bekomme ich im Menü-Eintrag "Neu..." die Option meine SpezialForm zu erstellen. -> Beim Klick wird eine Unit angelegt und es erscheint mein Formular. Ich kann sogar im Objektinspektor meine Eigenschaften einstellen (wie ich ganz oben geschrieben hab und ich es als "SUPER" empfand). Wenn ich mein Projekt aber später öffne, rasseln die Fehler... Eigenschaft1 fehlt, Eigenschaft2 fehlt, ... .
Weil die IDE beim Laden leider immer eine Instanz der TForm erstellt, die meine Eigenschaften nicht hat :(

Irgendwas mache ich noch falsch, ich weiß nur nicht was :cry:

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: abgeleitetes Formular

Beitrag von DiBo33 »

Ich habe ehrlich gesagt noch keine Komponente von TForm abgeleitet, kann also nur vermuten.
Versuch doch mal was passiert wenn du von TCustomForm ableitest.
Auch müsstest du, wenn ich richtig vermute, in der *.lpr neben der unit Forms auch noch deine unit einbinden, ob das überhaupt so funktioniert kann ich allerdings nicht sagen.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: abgeleitetes Formular

Beitrag von Teekeks »

Hast du es genau so gemacht wie in "Add a new Form Type" auf dieser Seite?
Und auch diese Zeile hier entsprechend angepasst:

Code: Alles auswählen

ResourceClass:=TForm;
Weil das klingt so als hättest du genau diese Zeile nicht angepasst.

watte
Beiträge: 13
Registriert: Di 3. Aug 2010, 20:57

Re: abgeleitetes Formular

Beitrag von watte »

Danke für Eure Antworten!

Ich bastel schon seit 2 Wochen. Ohne Erfolg. Den Fehler mit "ResourceClass:=TForm;" hatte ich auch gemacht, aber bereits behoben. Da wurde bei Menüeintrag "Neu..." (siehe Text oben) eine TForm angelegt. Ich hatte keinen meiner Eigenschaften im Inspektor. Nach der Anpassung "ResourceClass:=TSpecialForm;" ging es zumindest beim Schritt "Neu... -> SpezialForm".

Wie gesagt, erst beim Laden eines Projektes oder einer Unit mit meiner Formularklasse funktioniert es nicht mehr. :(

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: abgeleitetes Formular

Beitrag von lrlr »

hast du dir das .lfm mal angeschaut

steht das ganz oben "inherited Form: TFormX"

oder

object Form: TFormX

oder nur TForm (anstelle von TFormX) ??

watte
Beiträge: 13
Registriert: Di 3. Aug 2010, 20:57

Re: abgeleitetes Formular

Beitrag von watte »

Danke für den Tipp!

da steht...:

object Form1: TMySpecialForm
Left = 1850
Height = 240
Caption = 'Form1'
...
Zusatz1 = true
Zusatz2.Active = true

...
end

Es scheint eigentlich alles in Ordnung zu sein. Meine Klassenbibliothek habe ich nun schon gut 10 Jahre unter Delphi angesammelt und es lief alles super.
Nun will ich portieren und Lazarus will nicht so recht. Die anderen Komponenten laufen perfekt und werden auch im Objektinspektor angezeigt usw. Es sind nur die Formulare die nicht funktionieren. Im Objektinspektor(Lazarus) wird oben der richtige Klassenname angezeigt, die Eigenschaften darunter sind nur die von der TForm, alle zusätzlichen fehlen.

Bin am verzweifeln... :cry:

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: abgeleitetes Formular

Beitrag von arturx »

Hallo Watte,
Auch ich interessiere mich für Formularvererbung (genau wie Du zur Systematisierung des Codes)

Mit der Vererbung von Formularen scheint der Compiler Probleme zu haben.
Beispiel: folgendes einfache Szenario :

Form1 mit einem Button (oder welche Komponente auch immer)
dem Button ist ein onclick ereignis zugeordnet.
Form2 := class(tform1);

Nach Schließen von Lazarus und Laden dieses Projekts wird Form2 "vererbt" angezeigt. (prächtig !)
Drückt man in Form2 auf den vererbten Button, reagiert er wie es sein soll. (prima !)
Wenn man nun irgendetwas an form2 verändert (z.B. die Größe) und dann speichert, meckert Lazarus :

"die folgenden Methoden, die von form2:tform2 verwendet werden sind nicht im Quelltext unit2.
Button: tbutton.onclick=buttonclick.
Die hängenden Verweise löschen ?"

Eigentlich sollte das onclick Ereignis ja über form1 abgesättigt sein, aber der Compiler sucht es trotzdem über Form2.

Ist das ein Compiler - Bug ist !? Eure Meinung bitte !

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: abgeleitetes Formular

Beitrag von Socke »

arturx hat geschrieben:Ist das ein Compiler - Bug ist !? Eure Meinung bitte !
Nein. Das ist Lazarus. Lazarus (genauer müssten das die CodeUtils sein) analysieren den Inhalt deines Editors, sodass Lazarus weiß, was du denn da überhaupt für Pascal-Quelltext schreibst. Leider stimmt das nicht immer mit der Interpretation des Compilers überein.
Sprich: Wenn du es kompilieren kannst, liegt es an Lazarus und nicht am Compiler :D

Bitte beachtet auch, dass dieses Feature noch in den Kinderschuhen steckt, da es relativ neu ist. Wenn ich Frames verwende, erzeuge ich diese auch immer im Quelltext. Wenn ich die mit Lazarus auf einem Formular platziere, ich da (für mich) immer noch zu viel durcheinander bringen (persönliche Meinung).
Welche Lazarus-Versionen verwendet ihr denn?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: abgeleitetes Formular

Beitrag von arturx »

Ich verwende 9.28.2 beta auf WIN 2000 und XP

Das mit dem Durcheinanderbringen empfinde ich auch so.
Alle Versuche mit frames und Formularen waren vielversprechend, endeten jedoch nicht grundsätzlich so wie erwartet.
Sollte dann das Beispiel in den Lazarus-spezifischen Bugtracker ?
Übrigens : Das soll keine Meckerei sein
- ich finde es toll, was für Free Pascal und Lazarus schon geleistet wurde !!!!

Über den Ansatz, frames und Formvererbung hardcoded zu nutzen muss ich mal nachdenken....

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: abgeleitetes Formular

Beitrag von Bora4d »

Hast du das Beispiel im Ordner:
X:\lazarus\components\customform
angeschaut?
Dort wird genau das gemacht was du willst.

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: abgeleitetes Formular

Beitrag von arturx »

Bora4d hat geschrieben:Hast du das Beispiel im Ordner:
X:\lazarus\components\customform angeschaut?
Dort wird genau das gemacht was du willst.
Noch nicht. Werde ich gleicht tun. Dank für den Tip..

Antworten