[gelöst] eigene Komponente - läuft IDE oder Programm?

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

[gelöst] eigene Komponente - läuft IDE oder Programm?

Beitrag von willi4willi »

Hallo!

Ich habe eine eigene Komponente, die Parameter bei der Initialisierung aus einer INI-Datei nachladen soll. Der Name der INI-Datei soll auf der Basis des Dateinamens der EXE-Datei lauten.

Dazu ermittle ich diesen im Create-Constructor.

Code: Alles auswählen

 
  MyAppname:=paramstr(0);
  MyIniFileName:=ExtractFilePath(MyAppname)+ExtractFileName(MyAppname)+'_1.INI';
  FIniFileName:=MyIniFileName;
 


Wenn ich die Komponente in der IDE auf das Formular ziehe, dann gibt mir paramstr(0) natürlich die Lazarus.exe zurück. Starte ich das übersetzte Programm, dann allein, dann ist paramstr(0) mein Programmname und alles passt.

Wie bekomme ich heraus, ob der Create-Constructor durch das Hinzufügen meiner Komponente zum Formular in der IDE aufgerufen wird oder beim Start des Programms?

Oder gibt es eine andere Möglichkeit einer eigenen Komponente eine INI-Datei mitzugeben?

Hintergrund (Was will ich machen?):

Es gibt in einem Verzeichnis mehrere Programme (z.B. Otto_1.EXE, Otto_2.EXE, Otto_3.EXE).
Wenn es in dem Verzeichnis eine Datei Otto.INI gibt, verwenden alle drei Programme diese Datei. Wenn es diese Otto.INI nicht gibt, dann verwendet jedes Programm seine eigene Konfiguration (Otto_1.INI, Otto_2.INI, Otto_3.INI).
Außerdem soll es möglich sein, über Kommandozeilen-Parameter ( z.B. -UserKonfigFile Fritz.INI ) eine eigene Konfigurationsdatei zu verwenden.
Sollte ein Programm z.B. Otto_1.EXE keine Konfigurations-Datei finden, dann legt es sich eine eigene Datei (Otto_1.INI) an, die Default-Werte beinhaltet.

.
Zuletzt geändert von willi4willi am Mo 23. Mär 2020, 17:52, insgesamt 1-mal geändert.
 

Viele Grüße

Willi4Willi

------------

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

Re: eigene Komponente - läuft IDE oder Programm?

Beitrag von Mathias »

Oder gibt es eine andere Möglichkeit einer eigenen Komponente eine INI-Datei mitzugeben?

Ein Komponente holt die INI-Dateien aus dem Ordner, dort wo sich die restliche Config-Dateien von Lazarus befinden.
ZB. editoroptions.xml
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: eigene Komponente - läuft IDE oder Programm?

Beitrag von wp_xyz »

Soll die Komponente auch zur Entwurfszeit arbeiten? Etwa wie ein TDataset, der, wenn Active=true geschaltet ist, schon zur Entwurfszeit eine Datenbank anzeigt?

Wenn das nicht der Fall ist, kannst du die Routinen, die in der IDE nicht laufen sollen, verlassen, wenn das Element csDesigning in ComponentState deiner Komponente enthalten ist. Folgender Code-Ausschnitt des TCustomButton prüft z.B. ob sich die Komponente im Design-Modus befindet, also in der IDE läuft und nicht im eigenen Programm:

Code: Alles auswählen

procedure TCustomButton.WSSetText(const AText: String);
begin
  if not (csDesigning in ComponentState) then
  begin
    ...

Benutzeravatar
willi4willi
Lazarusforum e. V.
Beiträge: 155
Registriert: Sa 1. Nov 2008, 18:06
OS, Lazarus, FPC: Windows, Linux (debian) / Lazarus 3.2 / FPC 3.2.2
CPU-Target: i386, win64, arm

Re: eigene Komponente - läuft IDE oder Programm?

Beitrag von willi4willi »

Danke wp_xyz!

Genau die Abfrage von

Code: Alles auswählen

(csDesigning in ComponentState) 

löste mein Problem.
Ich hatte tagelang rumprobiert - derweil ist es so einfach.
 

Viele Grüße

Willi4Willi

------------

Antworten