FindComponent - Komponenten auf verschiedenen Formularen

Rund um die LCL und andere Komponenten
Antworten
VB_Lazarus
Beiträge: 85
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10 32/64bit, L 2.0.4 32bit, FPC 3.0.4 32bit
CPU-Target: 32Bit

FindComponent - Komponenten auf verschiedenen Formularen

Beitrag von VB_Lazarus »

Hallo,

ich habe folgendes Problem.
Ich möchte bei einigen DBGrid die Spaltenbreite einstellen mittles einer Einstellungsdatei.
Die DBGrids sind in verschiedenen Formularen.
Dazu habe ich eine Funktion in dem Hauptformular geschrieben, wo die Einstellungen in eine Einstellungsdatei geschrieben und gelesen werden.
Nun habe ich versucht, die Componente mittels FindComponent zu suchen und die Einstellungen zu lesen und schreiben.
Dies hat aber nur bei dem Hauptformular funktionert.
Auch den Aufruf über Application.FindComponent hat leider nicht zum gewünschten Ziel geführt.
ich bekomme immer die Fehlermeldung, das die Komponente nicht gefunden wurde.

Hat jemand eine Idee?

Danke.
Gruß

Michl
Beiträge: 2350
Registriert: Di 19. Jun 2012, 12:54

Re: FindComponent - Komponenten auf verschiedenen Formularen

Beitrag von Michl »

Du könntest sowas machen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to Application.ComponentCount - 1 do
    if Application.Components[i].FindComponent('SomeComponent') <> nil then
    begin
      ShowMessage('Gefunden');
      Break;
    end;
end;

Ich für meinen Teil halte eigentlich nichts davon Komponenten zu suchen. Ich arbeite viel mit Frames. Diese haben eine Initalisierungs- und Finalisierungsmethode bekommen. Die Initalisierungsmethode wird aufgerufen, wenn die erste Ansicht erfolgt. Die Finalisierungsmethode wird bei Programmende aufgerufen, wenn das entsprechende Frame einmal angezeigt wurde (und dort möglicherweise vom User verändert). Dort werden die jeweiligen Breiten, Höhen, Positionen etc. gespeichert und weggeschrieben.

Lazarus bietet auch die Möglichkeit der TIni- oder TXMLPropStorage (http://wiki.freepascal.org/TXMLPropStorage/de). Mit dieser könntest du in der IDE die speichernden Properties festlegen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten