Diverse CheckGroup.Checked[n] zusammenfassen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von catweasel »

Moin

Hat jemand eine Idee wie ich nachstehenden Text vereinfachen kann?

Code: Alles auswählen

if CheckGroup3.Checked[0]  then hostproperties:=hostproperties+1;
  if CheckGroup3.Checked[1]  then hostproperties:=hostproperties+2;
  if CheckGroup3.Checked[2]  then hostproperties:=hostproperties+4;
  if CheckGroup3.Checked[3]  then hostproperties:=hostproperties+8;
  if CheckGroup3.Checked[4]  then hostproperties:=hostproperties+16;
  if CheckGroup3.Checked[5]  then hostproperties:=hostproperties+32;
  if CheckGroup3.Checked[6]  then hostproperties:=hostproperties+64;
  if CheckGroup3.Checked[7]  then hostproperties:=hostproperties+128;
  if CheckGroup3.Checked[8]  then hostproperties:=hostproperties+256;
  if CheckGroup3.Checked[9]  then hostproperties:=hostproperties+512;
  if CheckGroup3.Checked[10] then hostproperties:=hostproperties+1024;
  if CheckGroup3.Checked[11] then hostproperties:=hostproperties+2048;
  if CheckGroup3.Checked[12] then hostproperties:=hostproperties+4096;
  if CheckGroup3.Checked[12] then hostproperties:=hostproperties+8192;
  if CheckGroup3.Checked[14] then hostproperties:=hostproperties+16384;
  if CheckGroup3.Checked[15] then hostproperties:=hostproperties+32768;
  if CheckGroup3.Checked[16] then hostproperties:=hostproperties+65536;
  if CheckGroup3.Checked[17] then hostproperties:=hostproperties+131072;
  if CheckGroup3.Checked[18] then hostproperties:=hostproperties+262144;
  if CheckGroup3.Checked[19] then hostproperties:=hostproperties+524288;
Gruß
Michael

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2809
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: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von m.fuchs »

Mal so aus dme Stehgreif und nicht ausprobiert:

Code: Alles auswählen

for i := 0 to 19 do
  if CheckGroup3.Checked[i] then
    hostproperties := hostproperties + (i ** 2)
hth
Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von catweasel »

m.fuchs hat geschrieben:Mal so aus dme Stehgreif und nicht ausprobiert:

Code: Alles auswählen

for i := 0 to 19 do
  if CheckGroup3.Checked[i] then
    hostproperties := hostproperties + (i ** 2)
Gibt den Fehler zurück:

Code: Alles auswählen

unit2.pas(107,41) Error: Operator is not overloaded

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2809
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: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von m.fuchs »

catweasel hat geschrieben:

Code: Alles auswählen

unit2.pas(107,41) Error: Operator is not overloaded
Da fehlt die Unit Math bei dir. Musst du noch einbinden.

Abgesehen davon ist auch ein Fehler meinerseits drin, es müsste richtig heißen:

Code: Alles auswählen

hostproperties := hostproperties + (2 ** i);
Man sollte doch ausprobieren bevor man postet, hilft bei den Flüchtigkeitsfehlern ungemein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von catweasel »

m.fuchs hat geschrieben:Da fehlt die Unit Math bei dir. Musst du noch einbinden.

Abgesehen davon ist auch ein Fehler meinerseits drin, es müsste richtig heißen:

Code: Alles auswählen

hostproperties := hostproperties + (2 ** i);
Man sollte doch ausprobieren bevor man postet, hilft bei den Flüchtigkeitsfehlern ungemein.
Danke jetzt funktioniert´s. An sie Unit math hatte ich auch schon gedacht, allerdings hatte ich sie in die falsche Unit eingebunden :oops:

Gruß
Michael

Socke
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: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von Socke »

Du könntest auch einfach ein Bit durch die Gegen schieben:

Code: Alles auswählen

hostproperties := hostproperties + 1 shl (i+1)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Diverse CheckGroup.Checked[n] zusammenfassen

Beitrag von mse »

catweasel hat geschrieben: Hat jemand eine Idee wie ich nachstehenden Text vereinfachen kann?

Code: Alles auswählen

if CheckGroup3.Checked[0]  then hostproperties:=hostproperties+1;
...
Um mal wieder "Dauerwerbung" zu machen ;-)
MSEgui's tbooleanedit (entspricht etwa TCheckBox) hat zu diesem Zweck "valuebitmask":

Code: Alles auswählen

property Tag: PtrInt read FTag write FTag default 0;
 
property value: boolean read getvalue write setvalue default false;
property group: integer read fgroup write fgroup default 0;
function valuetagbit: longword;
              //if value -> bits[tag] else -> 0
property valuebitmask: longword read getvaluebitmask write setvaluebitmask;
              //ored valuetagbit of all edits in group
Die "Tag" property bestimmt dabei die Bitnummer, "group" fasst die tbooleanedit mit dem gleichen "group"-Wert zu einer Gruppe zusammen.

Martin

Antworten