Komponenten durch For abfragen
-
- Beiträge: 6
- Registriert: Di 15. Dez 2020, 19:00
Komponenten durch For abfragen
Guten Tag,
In meinem Formular habe ich knapp 20 RadioButtons bzw. CheckBoxen. Durch einen Klick auf einen Knopf soll jede Komponente abgefragt werden, ob sie aktiviert ist und dann soll der Name (Caption) in ein Array gespeichert werden.
Das Array soll also die Länge annehmen, wie viele Buttons/Boxen aktiviert sind und die Namen halt nacheinander in ein Array abgespeichert werden.
Vielleicht werde ich es auch in eine Textdatei speichern.
Kann mir dabei jemand helfen?
Schon Mal danke für Antworten
Schönen Abend noch!
In meinem Formular habe ich knapp 20 RadioButtons bzw. CheckBoxen. Durch einen Klick auf einen Knopf soll jede Komponente abgefragt werden, ob sie aktiviert ist und dann soll der Name (Caption) in ein Array gespeichert werden.
Das Array soll also die Länge annehmen, wie viele Buttons/Boxen aktiviert sind und die Namen halt nacheinander in ein Array abgespeichert werden.
Vielleicht werde ich es auch in eine Textdatei speichern.
Kann mir dabei jemand helfen?
Schon Mal danke für Antworten
Schönen Abend noch!
- Maik81SE
- Beiträge: 327
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.4 FPC 3.2.2)
- CPU-Target: x86-64; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Komponenten durch For abfragen
Es gibt da 2 Möglichkeiten.
Entweder alle im jeweiligen OnChange abfragen, oder was ich in diesem Fall mache.
Eine seppereate Procedure und diese in jedem OnChance aufrufen.
An der OnChange kommst du definitiv nicht vorbei.
Da ich gerade am Tab bin, kann ich gerade kein Bsp Setzen.
PCs und PI4 bleiben heute aus.
Entweder alle im jeweiligen OnChange abfragen, oder was ich in diesem Fall mache.
Eine seppereate Procedure und diese in jedem OnChance aufrufen.
An der OnChange kommst du definitiv nicht vorbei.
Da ich gerade am Tab bin, kann ich gerade kein Bsp Setzen.
PCs und PI4 bleiben heute aus.
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
-
- Beiträge: 6
- Registriert: Di 15. Dez 2020, 19:00
Re: Komponenten durch For abfragen
Hallo,
danke für deine Antwort
Es ist also nicht möglich, bei dem Klick auf einen Button durch alle Zahlen zu iterieren und jeweils den Wert abzufragen?
Mfg
danke für deine Antwort

Es ist also nicht möglich, bei dem Klick auf einen Button durch alle Zahlen zu iterieren und jeweils den Wert abzufragen?
Mfg
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Komponenten durch For abfragen
Hallo,
ich hoffe das ich dich richtig verstanden habe. Probier mal mein kleines Beispiel ob das so in die richtige Richtung geht.
Vielleicht hilft es dir ja etwas weiter.
Edit: Hab ich vergessen, wenn du die // weg machst dann gehts mit dem Change Event.
Viele Grüße
Bernd
ich hoffe das ich dich richtig verstanden habe. Probier mal mein kleines Beispiel ob das so in die richtige Richtung geht.
Vielleicht hilft es dir ja etwas weiter.
Edit: Hab ich vergessen, wenn du die // weg machst dann gehts mit dem Change Event.
Viele Grüße
Bernd
- Dateianhänge
-
project1.zip
- (125.9 KiB) 65-mal heruntergeladen
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Komponenten durch For abfragen
Wenn du nicht alle Checkboxen in einem separaten Array zwischenhalten möchtest und es dir wirklich um alle Checkboxen auf einem Form geht, dann sollte dich folgender Code zum Ziel führen:
Code: Alles auswählen
function TForm1.GetCaptionsOfCheckedCheckboxes: TStringArray;
var
o: TComponent;
CurrentCheckbox: TCheckBox;
begin
Result := []; // ursprünglich "TStringArray.Create", dies wird aber in zukünftigen FPC-Versionen nicht mehr unterstützt
for o in Self do begin
if o is TCheckBox then begin
CurrentCheckbox := o as TCheckBox;
if CurrentCheckbox.Checked then begin
SetLength(Result, Length(Result) + 1);
Result[High(Result)] := CurrentCheckbox.Caption;
end;
end;
end;
end;
Antworten von Maik81SE kannst du immer getrost ignorieren.setblockmaster hat geschrieben: Di 15. Dez 2020, 20:13 danke für deine Antwort
Es ist also nicht möglich, bei dem Klick auf einen Button durch alle Zahlen zu iterieren und jeweils den Wert abzufragen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Komponenten durch For abfragen
@m.fuchs: Geniale Function!
Was ich aber nicht verstehe ist warum muss man nach kein free verwenden? Macht das TStringArray selber?
Viele Grüße
Bernd
Was ich aber nicht verstehe ist warum muss man nach
Code: Alles auswählen
TStringArray.Create;
Viele Grüße
Bernd
-
- 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: Komponenten durch For abfragen
TStringArray ist ein ganz normaler dynamischer Array und wird damit durch die automatische Referenzzählung wieder freigegeben.
Die Notation Result := TStringArray.Create ist gleichbedeutend mit SetLength(Result, 0), erzeugt im Gegensatz dazu aber keine Warnmeldung durch den Compiler.
Das ist eine relativ neue Syntax.
Die Notation Result := TStringArray.Create ist gleichbedeutend mit SetLength(Result, 0), erzeugt im Gegensatz dazu aber keine Warnmeldung durch den Compiler.
Das ist eine relativ neue Syntax.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Komponenten durch For abfragen
Vielen Dank für die Erklärung.
Viele Grüße
Bernd
Viele Grüße
Bernd
-
- Beiträge: 955
- 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: Komponenten durch For abfragen
Bitte beachte, dass die Nutzbarkeit von Create ohne Parameter bei dynamischen Arrays ein Bug ist und in zukünftigen Versionen von FPC behoben wird.Socke hat geschrieben: Mi 16. Dez 2020, 20:11 TStringArray ist ein ganz normaler dynamischer Array und wird damit durch die automatische Referenzzählung wieder freigegeben.
Die Notation Result := TStringArray.Create ist gleichbedeutend mit SetLength(Result, 0), erzeugt im Gegensatz dazu aber keine Warnmeldung durch den Compiler.
Man könnte auch einfach eine Syntax nehmen, die schon immer für dynamische Arrays funktioniert hat: Result := Nil. Dies funktioniert auch bei unbenannten Arrays.
Ansonsten gibt es ab 3.2.0 hierfür auch Result := []. Dies funktioniert ebenso mit unbenannten Arrays.
FPC Compiler Entwickler
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Komponenten durch For abfragen
Oha, gut zu wissen.PascalDragon hat geschrieben: Do 17. Dez 2020, 09:57 Bitte beachte, dass die Nutzbarkeit von Create ohne Parameter bei dynamischen Arrays ein Bug ist und in zukünftigen Versionen von FPC behoben wird.
Nil empfinde ich etwas unlogisch aber die neue Syntax mit den leeren, eckigen Klammern find ich gut.PascalDragon hat geschrieben: Do 17. Dez 2020, 09:57 Man könnte auch einfach eine Syntax nehmen, die schon immer für dynamische Arrays funktioniert hat: Result := Nil. Dies funktioniert auch bei unbenannten Arrays.
Ansonsten gibt es ab 3.2.0 hierfür auch Result := []. Dies funktioniert ebenso mit unbenannten Arrays.
Danke für die Hinweise.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Komponenten durch For abfragen
Warum wird das eigentlich als Bug gesehen und behoben? Hat es irgendwelche Nachteile wenn die Möglichkeit eines Create ohne Parameter existiert?PascalDragon hat geschrieben: Do 17. Dez 2020, 09:57 Bitte beachte, dass die Nutzbarkeit von Create ohne Parameter bei dynamischen Arrays ein Bug ist und in zukünftigen Versionen von FPC behoben wird.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 955
- 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: Komponenten durch For abfragen
Das Create existiert einfach nur zur Delphi Kompatibilität. Allein auf Grund der Tatsache, dass es zwei andere, umfassendere Varianten gibt sehe ich keinen Grund für dieses Konstrukt mehr zuzulassen als für die Kompatibilität nötig.m.fuchs hat geschrieben: Di 22. Dez 2020, 16:55Warum wird das eigentlich als Bug gesehen und behoben? Hat es irgendwelche Nachteile wenn die Möglichkeit eines Create ohne Parameter existiert?PascalDragon hat geschrieben: Do 17. Dez 2020, 09:57 Bitte beachte, dass die Nutzbarkeit von Create ohne Parameter bei dynamischen Arrays ein Bug ist und in zukünftigen Versionen von FPC behoben wird.
FPC Compiler Entwickler