CheckBox Matrix nach arry
-
Hi,
ich möchte folgendes machen,x x x x CheckBox1.1 - 1.4
x x x x CheckBox2.1 - 2.4
x x x x CheckBox3.1 - 3.4
x x x x CheckBox4.1 - 4.4char checkstate[4];
Es sollen nun die bits 0-3 in checkstate[0] die Zustände der
Checkboxen 1.1 - 1.4 annehmen, die CheckBoxen 2.1 - 2.4 ->checkstate[1]
unsw..
Da ich 20 CheckBox Zeilen a 4 CheckBoxen brauche und ich alle OnClick
Ereignisse auf CheckBox1.1 lege müsste ich nur noch eine Möglichkeit
haben anhand des Senders einen Index zu initialisieren und dann die ganze
CheckBox Zeile in die entsprechenden Stringspeicher zu schreiben.
Gibt es da eine Möglichkeit.Gruß
Johann
-
Schau dir mal die Tag-Eigenschaft an und suche mal hier im Forum nach dynamic_cast
-
Hallo,
kannst Du mir nichts genaueres sagen.
Borland Hilfe:
Die Eigenschaft Tag speichert eine Ganzzahl als Teil der Komponente.
__property int Tag = {read=FTag, write=FTag, default=0};Beschreibung
Tag hat keine vordefinierte Bedeutung. Sie können in dieser Eigenschaft zusätzliche Informationen über die Komponente in Form einer Ganzzahl speichern oder die Eigenschaft in einen 32-Bit-Wert, wie z.B. in eine Komponentenreferenz oder einen Zeiger, umgewandelt werden.
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
char index;
index = Sender->Tag;
}
funktioniert nicht;
Gruß
Johann
-
Der Tag-Property der CheckBoxes eine fortlaufende Nummer zuweisen, im OnClick dann den Sender nach TCheckBox casten und die Tag-Property auslesen.
Siehe auch die FAQ unter "Komponenten - Zugriff nicht üer Namen".
-
char index
index = (TCheckBox)Sender->Tag;
Funktioniert nicht.
-
Funktioniert nicht
Natürlich nicht

int index index = ((TCheckBox*)Sender)->Tag;
-
Dasd schrieb:
suche mal hier im Forum nach dynamic_cast
Muss man wirklich noch mehr dazu sagen?
-
blöde frage:
kann man, wenn man sich selber ein objekt von checkbox ableitet ein ereignis nicht als static deklarieren? dann könnte man doch mit dem this-pointer arbeiten oder irre ich mich da?
-
void __fastcall TForm1::alarm_Click(TObject *Sender) { char mask; int index; if (!dont_draw) { index = ((TCheckBox*)Sender)->Tag; mask = index & 0xff; index = index >> 8; if(((TCheckBox*)Sender)->Checked) { alarme[index] = alarme[index] | mask; } else { mask = mask ^ 0xff; alarme[index] = alarme[index] & mask; } if (!write_relay_data(index,alarme[index])) //write to RS232 { ask(&mede1[0]); //RS232 TIMEOUT? } } }Funktioniert, ich habe nun 20 CheckBox-Zeilen a 5 CheckBoxen wobei die erste
CheckBox Zeile die Tags 0x0001 - 0x0010 bekommen, die zweite die Tags
0x0101 - 0x0110 unsw....Das Highbyte ist der Index und das Lowbyte die Maske.
Vorher hatte ich für Jede CheckBox das OnClick Ereigniss benutzt was den
Code natürlich erheblich verlängert.Würde soetwas auch umgekehrt gehen, das CheckBox Feld steht für 20 Alarme
die 5 CheckBoxen für 5 Relays die Pro Alarm wählbar sind diese werden dann
via RS232 zu einer Controllerkarte übertragen und dort im EEPROM gespeichert.
Nun lade ich mir nach dem Windows Programmstart alle eingestellten Alarme vom Controller in das arry alarme[20]. Als erstes muss ich nun entsprechend der
gesetzten bits im Arry alarme meine CheckBoxen setzenalarm1_r1->Checked = alarme[0] & 0x01;
alarm1_r2->Checked = alarme[0] & 0x02;
alarm1_r3->Checked = alarme[0] & 0x04;
alarm1_r4->Checked = alarme[0] & 0x08;
alarm1_r5->Checked = alarme[0] & 0x10;alarm2_r1->Checked = alarme[1] & 0x01;
unsw.................
alarm20_r1->Checked = alarm[19] & 0x01;
Was ein bischen umständlich ist.
Muss gestehen das ich mit dem Casten noch so meine Probleme habe.
Vielen Dank