Ordner der eigenen Package ermitteln

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Ordner der eigenen Package ermitteln

Beitrag von Mathias »

Wen ich eine eigen Package programmiere, kann man in der abfragen, wo sich die Sourcen der Package befinden ?

Für einen Versuch, würde die in etwa so aussehen.

Code: Alles auswählen

procedure Register;
begin
   ShowMessage('Die Sorcen der Package befinde sich in: ' + ?????);
   ...
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 830
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Ordner der eigenen Package ermitteln

Beitrag von PascalDragon »

Mathias hat geschrieben:
Do 7. Apr 2022, 13:47
Wen ich eine eigen Package programmiere, kann man in der abfragen, wo sich die Sourcen der Package befinden ?
Nein, da dies ganz normaler Object Pascal Code ist, der so auch in der Anwendung landen könnte, und die IDE auch kein Compiler Define durchreicht, was dafür genutzt werden könnte.

Nebenbei: Ich würde „Package” eher als neutrum ansehen, abgeleitet vom Geschlecht von „Paket” (der Duden stimmt mir da zu ;) )
FPC Compiler Entwickler

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ordner der eigenen Package ermitteln

Beitrag von Mathias »

Meine Idee dahinter, beim Ordner der Package Sourcen befindet sich eine XML-Datei mit Voreinstellungen. Schön wäre es gewesen, wen ich diesen Pfad direkt in der installierten Package verlinken könnte.
Gegenwärtig, hat es einen Optionen Dialog in der Package, in der man den Pfad zu XML einstellen kann. Diesen Dialog würde ich natürlich sein lassen, so das der User immer noch die Möglichkeit hat den Pfad zu ändern, wen er die Sourcen mal in ein anders Ort verschiebt.

Das Ganze verwende ich in meine Embedded GUI. viewtopic.php?f=29&t=11842&p=127577&hil ... ed#p127577
In dieser hat es Templates & Examples für verscjieden Embedded Systeme.

Mein Ziel ist es, das im Edit-Feld (siehe Anhang) als Voreinstellung der Pfad schon richtig steht.
Dateianhänge
Bildschirmfoto vom 2022-04-08 16-50-48.png
Bildschirmfoto vom 2022-04-08 16-50-48.png (48.53 KiB) 1512 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
kupferstecher
Beiträge: 422
Registriert: Do 17. Nov 2016, 11:52

Re: Ordner der eigenen Package ermitteln

Beitrag von kupferstecher »

Ich hab mal in "meinem " Package geschaut, wie es dort gemacht wird, relevanter Ausschnitt siehe unten. Der Pfad wird in DoInitDescriptor ermittelt und dann in eine Variable PackagePath abgespeichert. Ist wohl aus einem anderen Package übernommen, also nicht meine Erfindung.

Code: Alles auswählen

function TAvrEmbeddedApplicationDescriptor.DoInitDescriptor: TModalResult;
var
  ThisPackage: TPackageLink;
  PackPath: string;
begin
  TAVRProject.Name:= 'avrproject';
  TAVRProject.Path:= '';
  TAVRProject.Device:= 'atmega32';
  TAVRProject.InstructionSet:= 'avr5';
  TAVRProject.ProgrammerCommand:= '';
  TAVRProject.ProgrammerNeedsPort:= false;

  ////Package Path
  ThisPackage:= PkgLinks.FindLinkWithPkgName(cPackageName);
  PackPath:= ThisPackage.LPKFilename;
  TAVRProject.PackagePath:= '';
  if length(PackPath) > length(cPkgFileName)+3 then
   if equal(PackPath,cPkgFileName,length(PackPath)-length(cPkgFileName)+1)
   then TAVRProject.
          PackagePath:= copy(PackPath,1,length(PackPath)-length(cPkgFileName));

  ////New project dialog
  if not assigned(dlgAVRProjForm) then dlgAVRProjForm:= TdlgAVRProjForm.Create(nil);
  dlgAVRProjForm.Init;

  Result:= dlgAVRProjForm.ShowModal;

end;

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ordner der eigenen Package ermitteln

Beitrag von Mathias »

Jetzt müsste man nur noch wissen, wie man an den Bezeichner "PkgLinks" kommt.
Könntest du die ganze Package hochladen ?
Oder hast du einen öffentlichen Link auf sie ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Ordner der eigenen Package ermitteln

Beitrag von af0815 »

Mathias hat geschrieben:
Sa 9. Apr 2022, 08:55
Jetzt müsste man nur noch wissen, wie man an den Bezeichner "PkgLinks" kommt.
Wenn ich das mit einem Suchprogramm im Lazarus Pfad suchen lassen, so bekomme ich einige Treffer. Ich vermute die Funktionen werden auch von OPM verwendet. Weil ich finde jede Menge Querverweise.

z.B.
C:\Data\lazdev\LazXX\lazarus\packager\packagelinks.pas
C:\Data\lazdev\LazXX\lazarus\packager\pkgmanager.pas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
kupferstecher
Beiträge: 422
Registriert: Do 17. Nov 2016, 11:52

Re: Ordner der eigenen Package ermitteln

Beitrag von kupferstecher »

In den Code müsste ich mich auch erst wieder einfinden. Hier der Link aufs Repo:

https://github.com/kupferstecher/LazPackageEmbeddedAVR

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ordner der eigenen Package ermitteln

Beitrag von Mathias »

Danke für die Infos.

Die Unit "PackageLinkIntf," muss eingebunden werden, weil dort "TPackageLink" drinnen ist.

Mit folgenden Code, komme ich am meine Infos, die mir weiter helfen.

Code: Alles auswählen

var
  ThisPackage: TPackageLink;
begin
  ThisPackage:= PkgLinks.FindLinkWithPkgName('embedded_gui_package');
  TabSheetTemplates.Caption:=ThisPackage.LPKFilename;
Aber ein kleiner Schönheitsfehler hat es doch noch, wen ich bei "FindLinkWithPkgName" eine ungültige Package reinschreibe, verabschiedet sich Lazarus mit einem Acess Validat.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Ordner der eigenen Package ermitteln

Beitrag von Mathias »

Ich habe noch folgendes gefunden: https://www.freepascal.org/docs-html/prog/progsu41.html , da gibt es $I Befehle mit dem man verschiedene Infos zum Project holen kann.
Da kann ich mir vorstellen, das es auch etwas gibt, mit dem man den Package Name holen kann.

PS: Beim durchforschen bin ich auf "{$I %HOME%}" gestossen. Wen man danach googelt kommt kein einziger Treffer. :roll:
Das mit dem Home habe ich hier gefunden: https://github.com/r3code/lazarus-excep ... upport.pas
PS2: Habe für %HOME% da Wiki angepasst: https://wiki.freepascal.org/$include/de ... .24INCLUDE
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 830
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Ordner der eigenen Package ermitteln

Beitrag von PascalDragon »

Mathias hat geschrieben:
Sa 9. Apr 2022, 13:38
Ich habe noch folgendes gefunden: https://www.freepascal.org/docs-html/prog/progsu41.html , da gibt es $I Befehle mit dem man verschiedene Infos zum Project holen kann.
Da kann ich mir vorstellen, das es auch etwas gibt, mit dem man den Package Name holen kann.

PS: Beim durchforschen bin ich auf "{$I %HOME%}" gestossen. Wen man danach googelt kommt kein einziger Treffer. :roll:
Das mit dem Home habe ich hier gefunden: https://github.com/r3code/lazarus-excep ... upport.pas
PS2: Habe für %HOME% da Wiki angepasst: https://wiki.freepascal.org/$include/de ... .24INCLUDE
Bitte lies die offizielle Dokumentation, bevor du für sowas irreführende Informationen ergänzt. Die Include-Direktive unterstützt eben nicht den Bezeichner HOME direkt, sondern die Direktive fragt den Wert aus den Umgebungsvariablen ab, wenn es kein explizit unterstützter Bezeichner ist.
FPC Compiler Entwickler

Antworten