[gelöst] TCheckbox platzieren und zugreifen
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
[gelöst] TCheckbox platzieren und zugreifen
Hallo zusammen,
ich versuche gerade auf einer Form mehrere Checkboxen visuell zu platzieren
und das .checked über einen Index zu setzen.
Quasi wie bei einem array.
mycheckbox.checked:=true;
Da die Checkboxen aber visuell auf die Form kommen, gibts ja keinen Index.
Es gibt z.B.
myCheckbox1
myCheckbox2
myCheckbox3
myCheckbox4.. wie die IDE das selber anlegt.
Wie kann ich auf eine spezielle Checkbox zugreifen ohne direkt "myCheckbox3" zu verwenden.
Geht das überhaupt halbwegs sinnvoll?
Alternative wäre ein array zu verwenden.
Hier aber die Frage wie ich die Checkboxen auf der Form verteile.
Oder macht man das so daß ich nichts sehe und zig mal probieren muß bis das optisch so paßt wie ich das will?
Schon mal danke im Vorraus für eure Hilfe
Gruß
NoCee
ich versuche gerade auf einer Form mehrere Checkboxen visuell zu platzieren
und das .checked über einen Index zu setzen.
Quasi wie bei einem array.
mycheckbox.checked:=true;
Da die Checkboxen aber visuell auf die Form kommen, gibts ja keinen Index.
Es gibt z.B.
myCheckbox1
myCheckbox2
myCheckbox3
myCheckbox4.. wie die IDE das selber anlegt.
Wie kann ich auf eine spezielle Checkbox zugreifen ohne direkt "myCheckbox3" zu verwenden.
Geht das überhaupt halbwegs sinnvoll?
Alternative wäre ein array zu verwenden.
Hier aber die Frage wie ich die Checkboxen auf der Form verteile.
Oder macht man das so daß ich nichts sehe und zig mal probieren muß bis das optisch so paßt wie ich das will?
Schon mal danke im Vorraus für eure Hilfe
Gruß
NoCee
Zuletzt geändert von NoCee am Do 25. Feb 2021, 09:52, insgesamt 3-mal geändert.
Re: TCheckbox platzieren und zugreifen
Deklariere dir im Formular ein Array of TCheckbox und weise jedem Array-Element eine der Checkboxen zu. Nun kannst du eine Checkbox über den Index im Checkbox-Array ansprechen.
Wenn die Checkboxes wie in dem Beispiel schön säuberlich durchnummeriert sind, könntest du auch die Methode FindComponent nehmen, die als Parameter den Komponenten-Namen erwartet, der hier einfach aus "Checkbox" und einer Zahl konstruiert werden könnte (allerdings kannst du hier die Checkbox nicht umbenennen, so dass sie einen "sprechenden" Namen haben):
Code: Alles auswählen
type
TForm1 = class(TForm)
Checkbox1: TCheckbox; // besser wäre es, die Checkboxen je nach Funktion umzubenennen
Checkbox2: TCheckbox;
Checkbox3: TCheckbox;
...
procedure FormCreate(Sender: TObject);
private
FCheckboxes: Array of TCheckbox;
...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(FCheckboxes, <anzahl der checkboxes>); // Hier richtigen Wert verwenden
FCheckBoxes[0] := Checkbox1;
FCheckBoxes[1] := Checkbox2;
FCheckBoxes[2] := Checkbox3;
...
end;
procedure TForm1.Button1Click(Sender: TObject);
var
cb: TCheckbox;
begin
cb := FCheckboxes[StrToInt(Edit1.Text)];
if cb <> nil then
cb.Checked := not cb.Checked;
end;
Code: Alles auswählen
function TForm1.FindCheckbox(CheckboxIndex: Integer): TCheckbox;
var
checkboxName: String;
C: TComponent;
begin
checkboxName := 'CheckBox' + IntToStr(CheckboxIndex);
C := FindComponent(checkboxName);
if C is TCheckbox then
Result := TCheckbox(C)
else
Result := nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
cb: TCheckbox;
begin
cb := FindCheckbox(StrToInt(Edit1.Text));
if cb <> nil then
cb.Checked := not cb.Checked;
end;
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TCheckbox platzieren und zugreifen
Hi!
Bau Dir eine procedure mit der Du alle Checkboxen an- oder ausschalten kanst.
Der Faulheit wegen ein Beispiel mit nur 2 Boxen:
Statt who als parameter könnte man auch gleich die ganze Checkbox übergeben, aber das gibt wieder so viel Tipparbeit. Die Puristen werden dieses aber schöner finden.
Winni
Bau Dir eine procedure mit der Du alle Checkboxen an- oder ausschalten kanst.
Der Faulheit wegen ein Beispiel mit nur 2 Boxen:
Code: Alles auswählen
procedure TForm1.CheckTheBoxes(who: Integer; checkIt : Boolean);
begin
case who of
1: CheckBox1.Checked := checkit;
2: CheckBox2.Checked := checkit;
end; // case
end;
Statt who als parameter könnte man auch gleich die ganze Checkbox übergeben, aber das gibt wieder so viel Tipparbeit. Die Puristen werden dieses aber schöner finden.
Winni
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: TCheckbox platzieren und zugreifen
Das geht ja fast in Echtzeit.
Was da alles mit Lazarus geht, schon Wahnsinn.
Ich bin jedes mal aufs Neue von Lazarus begeistert.
Allerdings zeigt mir das jedes mal wie weit ich von der "Weisheit" weg bin.
Vielen Dank für eure Hilfe
Gruß
NoCee
Was da alles mit Lazarus geht, schon Wahnsinn.
Ich bin jedes mal aufs Neue von Lazarus begeistert.
Allerdings zeigt mir das jedes mal wie weit ich von der "Weisheit" weg bin.

Vielen Dank für eure Hilfe
Gruß
NoCee
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: [gelöst] TCheckbox platzieren und zugreifen
So, alles umgebaut und funktioniert prima. Vielen Dank dafür.
Einzig eine Baustelle bekomme ich nicht hin.
Die Procedure ist ein event die gefeuert wird wenn LNet eine TCPIP Verbindung
aufgebaut hat. Ich habe die TLTCPComponets die auf der Form pappen
wie die anderen auch mit einem array verknüpft aber bei der Sender Abfrage
hörts bei mir jetzt auf. Das geht doch sicher auch irgendwie, oder?
Danke schon mal im Vorraus
Gruß
NoCee
Einzig eine Baustelle bekomme ich nicht hin.
Code: Alles auswählen
procedure TForm1.FNetClientRBGXConnect(aSocket: TLSocket);
var
Nr : integer;
myCompo: TLTCPComponent;
i: integer;
begin
myCompo := xxx as yyy;
for i := 1 to 10 do begin
if myCompo= FNetClientRBGx[i] then begin
Nr:= i;
break;
end;
end;
bla bla
aufgebaut hat. Ich habe die TLTCPComponets die auf der Form pappen
wie die anderen auch mit einem array verknüpft aber bei der Sender Abfrage
hörts bei mir jetzt auf. Das geht doch sicher auch irgendwie, oder?
Danke schon mal im Vorraus
Gruß
NoCee
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: TCheckbox platzieren und zugreifen
Ich verstehe nicht. Was genau ist Deine Frage?
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: TCheckbox platzieren und zugreifen
bei einem TButton hab ich "Sender" und "as TButton"
bei meiner Component hab ich TLTCPComponent
aber als Sender steht da halt aSocket und ein TTLSocket
was muß da stehen myCompo := xxx as yyy;
oder geht das so nicht?
Ich hab da mehrere TLTCPComponent
TLTCPComponent1
TLTCPComponent2
TLTCPComponent3
TLTCPComponent4
und alle haben den gleichen event procedure TForm1.FNetClientRBGXConnect(aSocket: TLSocket)
und ich muß herrausfinden welcher FNetClientRBGx aus dem array das gefeuert hat.
Gruß
NoCee
bei meiner Component hab ich TLTCPComponent
aber als Sender steht da halt aSocket und ein TTLSocket
was muß da stehen myCompo := xxx as yyy;
oder geht das so nicht?
Ich hab da mehrere TLTCPComponent
TLTCPComponent1
TLTCPComponent2
TLTCPComponent3
TLTCPComponent4
und alle haben den gleichen event procedure TForm1.FNetClientRBGXConnect(aSocket: TLSocket)
und ich muß herrausfinden welcher FNetClientRBGx aus dem array das gefeuert hat.
Gruß
NoCee
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: TCheckbox platzieren und zugreifen
Hmm,
der Entwickler von LNet hat wohl nicht vorgesehen, daß es mehrere TLTCPComponent Instanzen in einem Formular gibt und deshalb den Parameter Sender weggelassen.
Am einfachsten wäre es, für jede deiner Komponenten eine eigene OnConnect Methode zu schreiben, die dann eine gemeinsame aufruft.
oder du leitest eine eigene Klasse von TLTCPComponent ab, die den Sender ebenfalls handhabt.
der Entwickler von LNet hat wohl nicht vorgesehen, daß es mehrere TLTCPComponent Instanzen in einem Formular gibt und deshalb den Parameter Sender weggelassen.
Am einfachsten wäre es, für jede deiner Komponenten eine eigene OnConnect Methode zu schreiben, die dann eine gemeinsame aufruft.
Code: Alles auswählen
procedure TForm1.ComponentConnected(Sender: TObject; aSocket : TlSocket);
begin
...
end;
procedure TForm1.Component1Connect(aSocket : TlSocket);
begin
ComponentConnected(Component1, aSocket);
end;
procedure TForm1.Component2Connected(aSocket : TlSocket);
begin
ComponentConnected(Component2, aSocket);
end;
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: TCheckbox platzieren und zugreifen
Ich kenne die Komponenten nicht, aber TLSocket hat ein property Creator: TLComponent, über das man evt auf die gesuchte Instanz zurückgreifen kann.
-
- Beiträge: 174
- Registriert: Do 3. Mär 2011, 21:34
- OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
- CPU-Target: Intel 32/64Bit, ARM9
- Wohnort: Ulm
Re: TCheckbox platzieren und zugreifen
Ich habs jetzt so gelöst, in dem ich die sendende IP-Adresse mit meiner connecteten vergleiche.
den Sender erhalte ich da über aSocket.
Die Prozeduren funktionieren aber über das Componentenarray wie oben beschrieben einwandfrei.
Das hat mir viel Aufwand erspart.
Vielen Dank noch mal für die Tipps
Ich wünsche einen schönen, sonnigen Tag
NoCee
den Sender erhalte ich da über aSocket.
Die Prozeduren funktionieren aber über das Componentenarray wie oben beschrieben einwandfrei.
Das hat mir viel Aufwand erspart.
Vielen Dank noch mal für die Tipps
Ich wünsche einen schönen, sonnigen Tag
NoCee