CheckBox und SendMessage



  • Hallo!

    Ich versuche krampfhaft das Beispiel aus der FAQ zum laufen zu bringen. Ich meine das Beispiel "Haken setzen, ohne OnClick auszulösen". Ich bin der Meinung ich habe das auch schonmal hingebogen, aber irgednwie habe ich wohl eine Blockade. Hier mal mein Code:

    SendMessage( Form4->CheckBox4, BM_SETCHECK, BST_CHECKED, 0);
    

    Habt ihr einen Rat?

    Gruß:


  • Mod

    Hallo

    sollte es nicht Form4->CheckBox4->Handle sein

    MfG
    Klaus



  • aber das bringt keinen Unterschied! Ich kapiere nicht woran das liegt!



  • Hi,
    warum machst du nicht einfach:

    Form4->CheckBox4->Checked = true;
    

    MfG

    Alexander Sulfrian

    PS: Warum einfach, wenn's auch schwer geht!



  • @Alex:

    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 ich

    CheckBox1->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.


Anmelden zum Antworten