AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit checkbox.checked := true

Ein Thema von MarcusB · begonnen am 22. Aug 2004 · letzter Beitrag vom 23. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#1

Problem mit checkbox.checked := true

  Alt 22. Aug 2004, 20:52
Wie in einem älteren Thread beschrieben habe auch ich ein Problem, dass wenn man

checkbox.checked := true schreibt, auch gleich das OnClick-Event der Checkbox ausgelöst wird.

In diesem Thread wurde als Workaround folgendes vorgeschlagen :

SendMessage(checkbox.Handle, BM_SETCHECK, Integer(cbChecked), 0); Das funktioniert auch (die Checkbox ist - optisch zumindest - "checked"), allerdings liefert eine Abfrage auf

if (checkbox.checked) then ... leider ein false zurück

Wer kann mir da weiterhelfen ?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Problem mit checkbox.checked := true

  Alt 22. Aug 2004, 21:11
z.B. so (nicht getestet):

Delphi-Quellcode:
var
  SavedOnClick: TNotifyEvent;
begin
  SavedOnClick := checkbox1.OnClick;
  checkbox1.OnClick := nil;
  checkbox1.checked := true;
  checkbox1.OnClick := SavedOnClick;
end;
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 06:54
So, war mir leider gestern schon ein bischen spät um das auszuprobieren, aber ganz ehrlich gesagt kapiere ich deinen Ansatz nicht.
Was passiert da eigentlich?

Und warum ist das eigentlich so, das das OnClick-Event sofort mit aufgerufen wird?

Wäre schön wenn mich da jemand aufklären könnte

[edit]:
Ich habe noch was gefunden :

checkbox.Perform(BM_SETCHECK, 1, 0); Das funktioniert auch, aber auch nur für die Optik!
Wer kann mir in dem Zusammenhang mal die Parameter LParam und WParam bei Messages erklären?
[/edit]
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 08:34
Ich schieb mich mal
Weiss denn keiner was, bin schon etwas verzweifelt
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 08:50
Zitat von MarcusB:
So, war mir leider gestern schon ein bischen spät um das auszuprobieren, aber ganz ehrlich gesagt kapiere ich deinen Ansatz nicht.
Was passiert da eigentlich?

Und warum ist das eigentlich so, das das OnClick-Event sofort mit aufgerufen wird?

Wäre schön wenn mich da jemand aufklären könnte
Das ist so, weil die SetState-Methode der CheckBox die ererbte Methode Click vom TButtonControl aufruft. Die Methode ruft - wenn gesetzt - die Ereignisbehandlungsmethode OnClick auf. Deshalb der Ansatz von scp, die OnClick temporär zu umgehen, indem er sie auf nil setzt, den Checked-Status ändert und sie dann wieder setzt...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#6

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 09:05
Ok, danke, wobei mir da immer noch ein paar Fragen offen bleiben

Ich habe mein Problem jetzt so gelöst, dass ich eine einfache boolsche Variable benutze, die in den betreffenden
OnClick-Routinen auf Wahrheit geprüft wird. Diese setzte ich nun einfach auf false, solange ich intern den Checkbox Status
ändern will.

  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 09:10
Zitat von MarcusB:
Ok, danke, wobei mir da immer noch ein paar Fragen offen bleiben
Und zwar?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 09:15
Zitat von MarcusB:
Ich schieb mich mal
Weiss denn keiner was, bin schon etwas verzweifelt
Das Schieben ist frühestens nach 24 Stunden erlaubt!

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#9

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 09:38
@Sakura:

Sorry, kommt nicht wieder vor

@Stevie

Warum setzt

  checkbox.Perform(BM_SETCHECK, 1, 0); zwar den Haken in die Checkbox, aber die Property "Checked" ist immer noch false?

Und bei der Lösung von scp

Delphi-Quellcode:
  checkbox1.OnClick := nil;
  checkbox1.checked := true;
verstehe ich nicht, dass nach OnClick := nil doch wieder checked:=true aufgerufen wird, was doch eigentlich wieder OnClick auslöst
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem mit checkbox.checked := true

  Alt 23. Aug 2004, 09:44
Warum das Perform die Eigenschaft nicht setzt weiss ich nicht, aber es scheint Tatsache zu sein

Bei der anderen Variante:
Du merkst dir den Pointer auf die Prozedur die OnClick eigentlich ausgeführt werden soll in einer Variablen, und setzt aber OnClick selber auf NIL. Das heisst, dass OnClick jetzt einfach nichts mehr passiert. Dann setzt du ganz in Ruhe die Eigenschaft neu -> OnClick wird zwar gesendet, aber es steht ja keine Prozedur mehr dahinter. Wenn du dann mit der Eigenschaft fertig bist übergibst du an OnClick wieder die vorher gesicherte Prozedur, und OnClick passiert wieder was.

gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz