TApplication erweitern?

Rund um die LCL und andere Komponenten
Antworten
LazarusRocks
Beiträge: 40
Registriert: Mo 4. Aug 2008, 09:25
OS, Lazarus, FPC: WinXP(L 0.9.29SVN FPC 2.4.1)
CPU-Target: xxBit
Wohnort: CH

TApplication erweitern?

Beitrag von LazarusRocks »

Hallo,

ich habe TApplication erweitert.

property Application.UserDir (nix anderes als aufruf von GetUserDir)
property Application.ConfigDir (nix anderes als aufruf von GetAppConfigDir)

dazu musste ich die Datei E:\lazarus\fpc\2.4.1\source\packages\fcl-base\src\custapp.pp erweitern.

Nun wie weiter ? Muss ich nun fpc neu kompilieren ? Falls ja wie ?

Danke.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: TApplication erweitern?

Beitrag von carli »

Zieh dir am besten vom SVN den Lazarus-Source, bau den Change ein und generiere einen Patch.
Das ganze bietest du dann im irc #lazarus oder so als Patch an und in der nächsten Lazarus-Version ists drin.
Für dich lokal dann auch jetzt schon.

Denk aber dran, dass es plattformunabhängig sein muss, wenn es ins offizielle Lazarus-Repos rein soll

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

Re: TApplication erweitern?

Beitrag von theo »

LazarusRocks hat geschrieben: Nun wie weiter ? Muss ich nun fpc neu kompilieren ? Falls ja wie ?
Nein, du musst nur die LCL neu kompilieren.
http://wiki.lazarus.freepascal.org/IDE_ ... Lazarus/de" onclick="window.open(this.href);return false;

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: TApplication erweitern?

Beitrag von Socke »

theo hat geschrieben:Nein, du musst nur die LCL neu kompilieren.
http://wiki.lazarus.freepascal.org/IDE_ ... Lazarus/de" onclick="window.open(this.href);return false;
Falsch. Die Datei custapp.pp gehört wie, der Dateipfad schon sagt zu den Compiler Packages. Lazarus kann nur sich selbst und alles zur IDE gehört bauen. FPC, RTL und die Compiler Packages gehören nicht dazu. Daher gehe ich davon aus, dass die Klasse TCustomApplication verändert wurde (wenn nicht kann man alles ab hier ignorieren).
LazarusRocks hat geschrieben: Nun wie weiter ? Muss ich nun fpc neu kompilieren ? Falls ja wie ?
Du musst eigentlich nur diese eine Datei neu kompilieren und dann die alten Binärdateien ersetzen:

Code: Alles auswählen

cd E:\lazarus\fpc\2.4.1\source\packages\fcl-base\src\
fpc custapp.pp
mv custapp.o E:\lazarus\fpc\2.4.1\lib\units\i386-win32\fcl-base\
mv custapp.ppu E:\lazarus\fpc\2.4.1\lib\units\i386-win32\fcl-base\
Der Pfad, wo die vorkompilierten units bei dir gespeichert sind, ist nur geraten. Es gibt aber in der FPC-Installation ein Verzeichnis mit dem Namen "units" mit einem Unterverzeichnis, welches dein Prozessor und Betriebssystem wiederspiegelt (also i386-win32 oder x64-win32 oder ähnliches). Darin gibts ein Verzeichnis "fcl-base", wo die beiden erstellten Dateien custapp.o und custapp.ppu hinein müssen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: TApplication erweitern?

Beitrag von theo »

Socke hat geschrieben:
theo hat geschrieben:Nein, du musst nur die LCL neu kompilieren.
http://wiki.lazarus.freepascal.org/IDE_ ... Lazarus/de" onclick="window.open(this.href);return false;
Falsch.
Naja, sagen wir halb falsch. ;-)
Mit custapp.pp hast du natürlich recht.
Andererseits sagt er ja, er habe TApplication erweitert (unit Forms der LCL).
Wahrsch. hat er aber TCustomApplication (in custapp.pp) erweitert. Ob das sinnvoll ist, weiss ich nicht.

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: TApplication erweitern?

Beitrag von Socke »

theo hat geschrieben:Naja, sagen wir halb falsch. ;-)
Mit custapp.pp hast du natürlich recht.
Andererseits sagt er ja, er habe TApplication erweitert (unit Forms der LCL).
Wahrsch. hat er aber TCustomApplication (in custapp.pp) erweitert. Ob das sinnvoll ist, weiss ich nicht.
Die angesprochenen Funktionen sind in der RTL enthalten. Daher wären sie in TCustomApplication besser aufgehoben, wenn auch nicht unbedingt notwendig.
Wenn ich TApplication für meine Zwecke erweitern will, gehe ich eh einen anderen weg :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

LazarusRocks
Beiträge: 40
Registriert: Mo 4. Aug 2008, 09:25
OS, Lazarus, FPC: WinXP(L 0.9.29SVN FPC 2.4.1)
CPU-Target: xxBit
Wohnort: CH

Re: TApplication erweitern?

Beitrag von LazarusRocks »

Ja, ich habe custapp.pp erweitert.
Anschliessend ein kleines Test-Progrämmchen gemacht und das hat dann nicht compiliert.
Darauch hab ich dann Lazarus neu compiliert (mit Clean All usw) aber das hat auch nix gebracht.

Lustigerweise wurden die neuen Eigenschaften in der Code-Completition angezeigt.
Also muss ich offenbar FCL frisch compilieren.

Hab mir dann mit SVN den Freepascal Trunk geholt und gehofft dass da ein batch-datei sei um den ganzen Kram neu zu bilden.
Leider hab ich das dann aber nicht hingekriegt und deshalb hier im Forum meine Frage gepostet.

Danke.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6835
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TApplication erweitern?

Beitrag von af0815 »

LazarusRocks hat geschrieben: Hab mir dann mit SVN den Freepascal Trunk geholt und gehofft dass da ein batch-datei sei um den ganzen Kram neu zu bilden.
Es wird über 'make' dateien gemacht - Keine 'Batch-datei' damit geht das sowhl auf Win als auch auf Linux,... . Damit kann sowohl der FPC als auch Lazarus aus dem trunk erstellt werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: TApplication erweitern?

Beitrag von carli »

Vielleicht hilft auch ein einfaches "FPC Quellenverzeichnis neu einlesen"?

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TApplication erweitern?

Beitrag von Hitman »

carli hat geschrieben:Vielleicht hilft auch ein einfaches "FPC Quellenverzeichnis neu einlesen"?
Das ist für die Code-Completion, nicht für den Compiler. Er kommt nicht darum herum, mindestens die FCL neu zu bauen (und damit anschließend auch nochmal die LCL).

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

Re: TApplication erweitern?

Beitrag von theo »

Darf ich mal fragen, was der Sinn dieser Übung ist?
Ich meine das bringt ja nun echt nicht besonders viel, oder?
Ob es als Patch durchkommt, wage ich zu bezweifeln. Oder hat Delphi das neuerdings?

Ist schon OK, ich wollte nur mal fragen. ;-)

LazarusRocks
Beiträge: 40
Registriert: Mo 4. Aug 2008, 09:25
OS, Lazarus, FPC: WinXP(L 0.9.29SVN FPC 2.4.1)
CPU-Target: xxBit
Wohnort: CH

Re: TApplication erweitern?

Beitrag von LazarusRocks »

Ja TApplication wird halt seit Jahren vernachlässigt und wäre aber so eine schöne Sache.

So muss ich z.B. oft in meine Projekt Code reinkopieren um z.B. UniqueInstance zu erhalten.

Wäre doch schön wenn man Application.UniqueInstance:=true; schreiben könnte und die Sache wäre erledigt
Oder wie ein anderer Thread hier im Forum zeigt wäre z.B. Application.Version ganz nett.

Und damit halt die Config-Dateien am richtigen Ort landen:
Application.UserDir // user path
Application.ConfigDir // all users
Application.Path // "startIn" path der Anwendung

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: TApplication erweitern?

Beitrag von Socke »

LazarusRocks hat geschrieben:Ja TApplication wird halt seit Jahren vernachlässigt
Dann dürfte seit Jahren alles da sein, um Programme zum Laufen zu bringen. Am Hilfesystem wird zwar noch gearbeitet, aber es ist in Arbeit.
LazarusRocks hat geschrieben:So muss ich z.B. oft in meine Projekt Code reinkopieren um z.B. UniqueInstance zu erhalten.
Wäre doch schön wenn man Application.UniqueInstance:=true; schreiben könnte und die Sache wäre erledigt
Wenn du meinst, dass TApplication unterstützen sollte, dass immer nur eine Instanz deiner Anwendung gestartet werden darf, und du deshalb immer diesen Code kopieren musst, versuche dich einmal mit einem Package. Ob ich dann Application.UniqueInstance := True oder AllowMultipleInstances(False) (als funktionale Variante) verwende ist für mich eher Nebensache.
LazarusRocks hat geschrieben:Oder wie ein anderer Thread hier im Forum zeigt wäre z.B. Application.Version ganz nett.
Was soll diese Eigenschaft/Funktion zurückliefern? Eine Versionsnummer ist in der Regel nicht Bestandteil einer Anwendung sondern eine Eigenschaft. Damit wäre es in einer Eigenen Unit (siehe LCL/Lazarus) eventuell besser aufgehoben. Wenn allerdings die Versionsinformationen aus dem Ressourcen-Abschnitt der Binärdatei extrahiert werden soll, stimme ich für eine entsprechende Funktion in der FCL (nicht in der LCL oder RTL). Den angesprochenen Thread kenne ich nicht (kannst du den evtl. verlinken?)

Wenn ich TApplication erweitern möchte, mache ich das üblicherweise auf Projektbasis. Es spricht aber nichts dagegen, eine entsprechende Klasse in einem Package für alle Projekte bereit zu halten:

Code: Alles auswählen

uses Forms;
initialization
Application.Free;
Application := TMyApplication.Create(nil);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten