CheckBox und SendMessage
-
Hi,
warum machst du nicht einfach:Form4->CheckBox4->Checked = true;
MfG
Alexander Sulfrian
PS: Warum einfach, wenn's auch schwer geht!
-
vermutlich deswegen nicht:
BCB-Hilfe:
OnClick wird normalerweise ausgelöst, wenn der Benutzer mit der primären Maustaste auf das Steuerelement klickt. Das Ereignis kann aber auch folgendermaßen ausgelöst werden:
.
.
.Die Eigenschaft Checked eines Optionsfeldes wird auf true gesetzt.
.
.
-
genau deswegen!
ich habe bisher immer noch keine Lösung gefunden!
-
Die SendMessage-Variante funktioniert anstandslos.
Hast du vielleicht das Prinzip falsch verstanden? Es handelt sich um keine generelle Deaktivierung des OnClick-Events, vielmehr wird mit der Message der Haken jeweils gesetzt bzw. entfernt.Für eine generelle Lösung solltest du dir mal die im FAQ-Beitrag verlinkte Alternative ansehen.
-
@ Jansen
Ja, genau der Haken sollte gesetzt werden.
Also wenn ich den Haken mit der SendMessage Methode setze, sollte doch auch CheckBox1->Checked auf true gesetzt werden oder nicht?
-
Wohl nicht, die Property der CheckBox-Klasse selbst dürfte davon nicht beeinflusst werden.
Du verrätst uns ja nicht, was du eigentlich vor hast, aber dich denke, die angesprochenen Alternativ-Lösungen sind wohl eher geeignet.
-
ich möchte ganz einfach nur einen haken setzen, den man sowohl sehen als auch abfragen kann, allerdings soll dabei nicht das onclick ereignis angesprochen werden!
-
Ich denke, das war soweit klar.
Interessant wäre, warum das Ereignis nicht ausgelöst werden soll.
-
Vielleicht solltest du das OnClick Ereignis ganz einfach nur mittels einer globalen / Formularklassen - Variablen "ausschalten". (sprich if(...) return;) fertig.
-
@ Jansen
Ich denke nicht das es von wichtigkeit ist, warum das Ereignis nicht ausgelöst werden soll. Ist ja wohl echt Nebensache oder nicht?
@ Dasd
Es ist ja nicht so das ich das OnClick Ereignis nicht brauche.
Es geht mir eigentlich nur darum das, wenn ich einen Haken per Programm setze nicht das OnClick Ereignis ausgeführt werden soll. Und das tut es nun dummerweise wenn ichCheckBox1->Checked = true;
schreibe. Mit der SendMessage Methode sollte das doch wohl eigentlich Möglich sein. Es wäre ja echt dumm wenn es nicht gehen würde.
-
Der Vorschlag von Dasd ist doch soweit OK. Erfinde eine boolsche Variable in deiner Form (wenn true wird OnClick ausgeführt). Setze sie kurz vor Veränderung deiner Checked Eigenschaft auf false und dann gleich wieder true;
Du kannst auch den OnClick Event deiner Checkbox kurzfristig aushängen (auf NULL setzen). Das würde auch gehen, obwohl es für meine Begriffe etwas brutal wirkt.
-
ratfury schrieb:
Ich denke nicht das es von wichtigkeit ist, warum das Ereignis nicht ausgelöst werden soll.
Diesbezügliche Informationen würden es uns ggf. erlauben, einen komplett anderen Lösungansatz vorzuschlagen.
Braunstein:
Super Vorschlag, scheint so, als ob wenigstens du die besagten Alternativen aus dem FAQ-Beitrag studiert hättest?
-
Sorry Jansen,
ich hatte jetzt nicht in die FAQ geschaut. Das nächste mal mach ich es und verweise direkt drauf.
-
Ich finde Braunsteins Methode ziemlich uncool. Scheint aber so, als ob ich es so machen müsste.
Blöd.
Wozu ist denn dann die SendMessage Methode da??@Jansen :p
-
Braunstein schrieb:
Das nächste mal mach ich es und verweise direkt drauf.
Hatte ich hier ja bereits zweimal getan, offensichtlich ohne Erfolg.
ratfury schrieb:
Wozu ist denn dann die SendMessage Methode da?
SendMessage ist WinAPI, TCheckBox ist VCL.
Es gibt sicher auch eine reine WinAPI-Variante, um allein den "grafischen" Zustand der CheckBox auszulesen, die TCheckBox-Klasse (die ja ein Wrapper um das entsprechende Windows-Control ist) bietet so eine Möglichkeit aber nicht.
-
Das ganze kann man auch ohne SendMessage bewerkstelligen :
TNotifyEvent NotifyEvent=CheckBox->OnClick ; // Event sichern CheckBox->OnClick=0 ; // Event auf 0 setzen CheckBox->Checked=true ; CheckBox->OnClick=NotifyEvent ; // Event wieder setzen
-
Super, case, jetz haben wir diese Lösung zum vierten Mal in diesem Thread.
Vielen Danke für's Mitlesen.
-
Das hat den Nachteil, dass ein echter Klick, der zum falschen Moment kommt verloren geht.
Es geht aber auch einfacher und sicherer:
Du nimmst einfach das OnMouseUp Event und togglest darin die Checked Eigenschaft. Das OnClick Event läßt du leer.
-
Wenn ich ratfury richtig verstanden habe soll unter gewissen Umständen durchaus das OnClick-Event ausgelöst werden.
Ansonsten siehe auch den FAQ-Thread, Stichwort 'Leertaste'.
-
Wenn ich ratfury richtig verstanden habe soll unter gewissen Umständen durchaus das OnClick-Event ausgelöst werden.
Na klar, dann setzt er seinen Code dafür eben in das OnMouseUp Event.