|
| Checkboxe som radiobtn's Fra : Lars HT |
Dato : 12-01-05 20:25 |
|
Haves 5 checkboxe, som skal opføre sig som radiobtn's.
Hvordan får jeg det til?
Har prøvet med
procedure Tform1.TrykPaaCheckbox(Sender: TObject);
begin
if chkBox1<>(sender as TCheckBox) then
chkBox1.Perform(BM_SETCHECK, 0, 0);
if chkBox2<>(sender as TCheckBox) then
chkBox2.Perform(BM_SETCHECK, 0, 0);
if chkBox3<>(sender as TCheckBox) then
chkBox3.Perform(BM_SETCHECK, 0, 0);
if chkBox4<>(sender as TCheckBox) then
chkBox4.Perform(BM_SETCHECK, 0, 0);
if chkBox5<>(sender as TCheckBox) then
chkBox5.Perform(BM_SETCHECK, 0, 0);
end;
og
procedure Tform1.TrykPaaCheckbox(Sender: TObject);
begin
if chkBox1<>(sender as TCheckBox) then
chkBox1.Checked:=false;
if chkBox2<>(sender as TCheckBox) then
chkBox2.Checked:=false;
if chkBox3<>(sender as TCheckBox) then
chkBox3.Checked:=false;
if chkBox4<>(sender as TCheckBox) then
chkBox4.Checked:=false;
if chkBox5<>(sender as TCheckBox) then
chkBox5.Checked:=false;
end;
....men ingen af dem virker, som de skal!
Lars
| |
Thor (12-01-2005)
| Kommentar Fra : Thor |
Dato : 12-01-05 22:13 |
|
Ikke testet, men det maa da virke:
procedure Tform1.TrykPaaCheckbox(Sender: TObject);
begin
checkbox1.checked := false;
checkbox2.checked := false;
checkbox3.checked := false;
checkbox4.checked := false;
checkbox5.checked := false;
(sender as tcheckbox).checked := true;
end;
"Lars HT" <aslaktoke@yahoo.danmark> skrev i en meddelelse
news:41e57433$0$29451$ba624c82@nntp06.dk.telia.net...
> Haves 5 checkboxe, som skal opføre sig som radiobtn's.
>
> Hvordan får jeg det til?
>
> Har prøvet med
>
> procedure Tform1.TrykPaaCheckbox(Sender: TObject);
> begin
> if chkBox1<>(sender as TCheckBox) then
> chkBox1.Perform(BM_SETCHECK, 0, 0);
> if chkBox2<>(sender as TCheckBox) then
> chkBox2.Perform(BM_SETCHECK, 0, 0);
> if chkBox3<>(sender as TCheckBox) then
> chkBox3.Perform(BM_SETCHECK, 0, 0);
> if chkBox4<>(sender as TCheckBox) then
> chkBox4.Perform(BM_SETCHECK, 0, 0);
> if chkBox5<>(sender as TCheckBox) then
> chkBox5.Perform(BM_SETCHECK, 0, 0);
> end;
>
> og
>
> procedure Tform1.TrykPaaCheckbox(Sender: TObject);
> begin
> if chkBox1<>(sender as TCheckBox) then
> chkBox1.Checked:=false;
> if chkBox2<>(sender as TCheckBox) then
> chkBox2.Checked:=false;
> if chkBox3<>(sender as TCheckBox) then
> chkBox3.Checked:=false;
> if chkBox4<>(sender as TCheckBox) then
> chkBox4.Checked:=false;
> if chkBox5<>(sender as TCheckBox) then
> chkBox5.Checked:=false;
> end;
>
> ...men ingen af dem virker, som de skal!
>
> Lars
>
| |
Lars HT (12-01-2005)
| Kommentar Fra : Lars HT |
Dato : 12-01-05 22:51 |
|
"Thor" <thor@thor.thor> wrote in message
news:cs43h0$1n4d$1@news.cybercity.dk...
> Ikke testet, men det maa da virke:
>
> procedure Tform1.TrykPaaCheckbox(Sender: TObject);
> begin
> checkbox1.checked := false;
> checkbox2.checked := false;
> checkbox3.checked := false;
> checkbox4.checked := false;
> checkbox5.checked := false;
> (sender as tcheckbox).checked := true;
> end;
Ja, men problemet er, at jeg også skal kunne afkrydse en checket checkbox.
Det ved jeg godt, at jeg glemte at skrive!
Altså: Kun én kan være checket, men der behøver ikke at være checket nogen
overhovedet!
Lars
| |
Ukendt (13-01-2005)
| Kommentar Fra : Ukendt |
Dato : 13-01-05 09:56 |
|
"Lars HT" <aslaktoke@yahoo.danmark> wrote in message
news:41e59666$0$15143$ba624c82@nntp06.dk.telia.net...
>
Virker det her bedre?
procedure Tform1.TrykPaaCheckbox(Sender: TObject);
var
tmp: boolean;
begin
tmp:= (sender as tcheckbox).checked;
checkbox1.checked := false;
checkbox2.checked := false;
checkbox3.checked := false;
checkbox4.checked := false;
checkbox5.checked := false;
(sender as tcheckbox).checked := not tmp;
end;
>
> Ja, men problemet er, at jeg også skal kunne afkrydse en checket
checkbox.
> Det ved jeg godt, at jeg glemte at skrive!
> Altså: Kun én kan være checket, men der behøver ikke at være checket
nogen
> overhovedet!
>
> Lars
>
>
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 12:25 |
|
"Uffe Kousgaard" <look_at_ www.routeware.dk> wrote in message
news:41e6379c$0$177$edfadb0f@dtext01.news.tele.dk...
> "Lars HT" <aslaktoke@yahoo.danmark> wrote in message
> news:41e59666$0$15143$ba624c82@nntp06.dk.telia.net...
>>
>
> Virker det her bedre?
>
> procedure Tform1.TrykPaaCheckbox(Sender: TObject);
> var
> tmp: boolean;
> begin
> tmp:= (sender as tcheckbox).checked;
> checkbox1.checked := false;
> checkbox2.checked := false;
> checkbox3.checked := false;
> checkbox4.checked := false;
> checkbox5.checked := false;
> (sender as tcheckbox).checked := not tmp;
> end;
>
Nej, desværre! Problemet er, at der bliver fyres en OnCheckboxClick-envent
af hver gang en checkbox via kode sættes til true eller false. Det gør, at
der kommer rod idet. Tokes forslag tager derimod højde for alle disse
OnClick-events og godtager kun det fra checkboxen, der bliver trykket på!
Ret smart!
Tak for forslaget alligevel!
'
Lars
| |
Ove Kjeldgaard (13-01-2005)
| Kommentar Fra : Ove Kjeldgaard |
Dato : 13-01-05 21:41 |
|
"Lars HT" <aslaktoke@yahoo.danmark> wrote:
>Nej, desværre! Problemet er, at der bliver fyres en OnCheckboxClick-envent
>af hver gang en checkbox via kode sættes til true eller false. Det gør, at
>der kommer rod idet. Tokes forslag tager derimod højde for alle disse
>OnClick-events og godtager kun det fra checkboxen, der bliver trykket på!
>Ret smart!
Jeg har en enkelt gang haft problemer med en gang "biden sig selv i halen
noget", og det kan meget vel have været et CheckBox problem.
Jeg løste det ved at disable OnClick procedurene mens jeg opdatere diverse
kontroller i kode.
Altså før man starter:
CheckBox1.OnClick := Nil;
CheckBox2.OnClick := Nil;
CheckBox3.OnClick := Nil;
CheckBox4.OnClick := Nil;
CheckBox5.OnClick := Nil;
Så opdaterer man hvad der skal opdateres.
Og før man retunerer:
CheckBox1.OnClick := OnCheckBoxUpdateClick;
CheckBox2.OnClick := OnCheckBoxUpdateClick;
CheckBox3.OnClick := OnCheckBoxUpdateClick;
CheckBox4.OnClick := OnCheckBoxUpdateClick;
CheckBox5.OnClick := OnCheckBoxUpdateClick;
Ovennævnte er ikke testet, men når evt. syntax er på plads så skal det virke.
--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: < http://hiker.dk>
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 23:35 |
|
Tak, det ser også ud som en udmærket måde, at gøre det på!
Lars
"Ove Kjeldgaard" <ReadMyEmail@The.Signature> wrote in message
news:ramdu05ajlqgo3sci83b7l38ov5o1dmoji@4ax.com...
> "Lars HT" <aslaktoke@yahoo.danmark> wrote:
>
>>Nej, desværre! Problemet er, at der bliver fyres en OnCheckboxClick-envent
>>af hver gang en checkbox via kode sættes til true eller false. Det gør, at
>>der kommer rod idet. Tokes forslag tager derimod højde for alle disse
>>OnClick-events og godtager kun det fra checkboxen, der bliver trykket på!
>>Ret smart!
>
> Jeg har en enkelt gang haft problemer med en gang "biden sig selv i halen
> noget", og det kan meget vel have været et CheckBox problem.
>
> Jeg løste det ved at disable OnClick procedurene mens jeg opdatere diverse
> kontroller i kode.
>
> Altså før man starter:
>
> CheckBox1.OnClick := Nil;
> CheckBox2.OnClick := Nil;
> CheckBox3.OnClick := Nil;
> CheckBox4.OnClick := Nil;
> CheckBox5.OnClick := Nil;
>
> Så opdaterer man hvad der skal opdateres.
>
> Og før man retunerer:
>
> CheckBox1.OnClick := OnCheckBoxUpdateClick;
> CheckBox2.OnClick := OnCheckBoxUpdateClick;
> CheckBox3.OnClick := OnCheckBoxUpdateClick;
> CheckBox4.OnClick := OnCheckBoxUpdateClick;
> CheckBox5.OnClick := OnCheckBoxUpdateClick;
>
>
> Ovennævnte er ikke testet, men når evt. syntax er på plads så skal det
> virke.
>
>
> --
> Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
> Natur og Friluftsliv: < http://hiker.dk>
| |
Thor (13-01-2005)
| Kommentar Fra : Thor |
Dato : 13-01-05 13:58 |
|
Hej Lars:
Hermed en version, der stopper uendelig løkke, og den er testet:
var stoploop : boolean;
procedure TForm1.CheckBox5Click(Sender: TObject);
var newstate : boolean;
checkbox : tcheckbox;
begin
if stoploop then exit;
stoploop := true;
checkbox := sender as tcheckbox;
newstate := checkbox.checked;
checkbox1.checked := false;
checkbox2.checked := false;
checkbox3.checked := false;
checkbox4.checked := false;
checkbox5.checked := false;
checkbox.checked := newstate;
stoploop := false;
end;
mvh Thomas Riedel
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 14:11 |
|
"Thor" <thor@thor.thor> wrote in message
news:cs5qt8$ef3$1@news.cybercity.dk...
> Hej Lars:
> Hermed en version, der stopper uendelig løkke, og den er testet:
>
> var stoploop : boolean;
> procedure TForm1.CheckBox5Click(Sender: TObject);
> var newstate : boolean;
> checkbox : tcheckbox;
> begin
> if stoploop then exit;
> stoploop := true;
> checkbox := sender as tcheckbox;
> newstate := checkbox.checked;
> checkbox1.checked := false;
> checkbox2.checked := false;
> checkbox3.checked := false;
> checkbox4.checked := false;
> checkbox5.checked := false;
> checkbox.checked := newstate;
> stoploop := false;
> end;
Ja, det er nødvendigt med den stoploop for at tage højde for alle de metode,
som bliver kørt oveni hinanden!
Jeg har imidlertid allerede implementeret Tokes løsning, men tak for
indsatsen!
VH Lars
| |
Toke Eskildsen (13-01-2005)
| Kommentar Fra : Toke Eskildsen |
Dato : 13-01-05 12:03 |
|
Lars HT wrote:
> Haves 5 checkboxe, som skal opføre sig som radiobtn's.
At lade en standardkontrol opføre sig som en anden standardkontrol
er næsten altid en sikker måde at forvirre sine brugere.
http://digilander.libero.it/chiediloapippo/Engineering/iarchitect/controls.htm
Jeg kan se at du også har muligheden at der ikke er markeret noget,
men det kan gøres med
[ ] Benyt muligheder
( ) Mulighed 1
( ) Mulighed 2
( ) Mulighed 3
( ) Mulighed 4
( ) Mulighed 5
Det har endvidere den fordel at man kan markere listen af muligheder
som inaktiv, når "Benyt muligheder" ikke er slået til.
Men hvis du insisterer...
procedure TForm1.checkBobClicked(Sender: TObject);
begin
with Sender as TCheckBox do
begin
if not Focused then exit; { Avoid endless loop }
CheckBox1.Checked:= (Sender = CheckBox1) and Checked;
CheckBox2.Checked:= (Sender = CheckBox2) and Checked;
CheckBox3.Checked:= (Sender = CheckBox3) and Checked;
CheckBox4.Checked:= (Sender = CheckBox4) and Checked;
CheckBox5.Checked:= (Sender = CheckBox5) and Checked;
end;
end;
Fælden i øvelsen er en uendelig løkke. Det undgås dels ved at kun at
udføre ændringer, såfremt kontrollen er fokuseret og dels fordi det
ikke udløser en begivenhed at sætte Checked til den værdi Checked er
i forvejen.
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 12:21 |
|
"Toke Eskildsen" <darkwing@daimi.au.dk> wrote in message
news:Xns95DD7AB63B81Ftokeeskildsen@130.133.1.4...
> Lars HT wrote:
>
>> Haves 5 checkboxe, som skal opføre sig som radiobtn's.
>
> At lade en standardkontrol opføre sig som en anden standardkontrol
> er næsten altid en sikker måde at forvirre sine brugere.
> http://digilander.libero.it/chiediloapippo/Engineering/iarchitect/controls.htm
>
> Jeg kan se at du også har muligheden at der ikke er markeret noget,
> men det kan gøres med
>
> [ ] Benyt muligheder
> ( ) Mulighed 1
> ( ) Mulighed 2
> ( ) Mulighed 3
> ( ) Mulighed 4
> ( ) Mulighed 5
>
> Det har endvidere den fordel at man kan markere listen af muligheder
> som inaktiv, når "Benyt muligheder" ikke er slået til.
>
>
> Men hvis du insisterer...
>
> procedure TForm1.checkBobClicked(Sender: TObject);
> begin
> with Sender as TCheckBox do
> begin
> if not Focused then exit; { Avoid endless loop }
> CheckBox1.Checked:= (Sender = CheckBox1) and Checked;
> CheckBox2.Checked:= (Sender = CheckBox2) and Checked;
> CheckBox3.Checked:= (Sender = CheckBox3) and Checked;
> CheckBox4.Checked:= (Sender = CheckBox4) and Checked;
> CheckBox5.Checked:= (Sender = CheckBox5) and Checked;
> end;
> end;
>
> Fælden i øvelsen er en uendelig løkke. Det undgås dels ved at kun at
> udføre ændringer, såfremt kontrollen er fokuseret og dels fordi det
> ikke udløser en begivenhed at sætte Checked til den værdi Checked er
> i forvejen.
Tak for svaret, det virker perfect!
Jeg forstår dine forbehold, men i den sammenhæng, jeg skal bruge det, tror
jeg, at det går!
Hej fra Lars
| |
Toke Eskildsen (13-01-2005)
| Kommentar Fra : Toke Eskildsen |
Dato : 13-01-05 14:43 |
|
Lars HT wrote:
> Jeg forstår dine forbehold, men i den sammenhæng, jeg skal bruge
> det, tror jeg, at det går!
Er det noget du kan vise et screenshot af? Jeg er meget skeptisk, men
omvendt ville jeg gerne se et eksempel, hvor det virker at bryde med
den etablerede standard.
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 14:56 |
|
"Toke Eskildsen" <darkwing@daimi.au.dk> wrote in message
news:Xns95DD95C255210tokeeskildsen@130.133.1.4...
> Lars HT wrote:
>
>> Jeg forstår dine forbehold, men i den sammenhæng, jeg skal bruge
>> det, tror jeg, at det går!
>
> Er det noget du kan vise et screenshot af? Jeg er meget skeptisk, men
> omvendt ville jeg gerne se et eksempel, hvor det virker at bryde med
> den etablerede standard.
Den har du her news:41e67d4f$0$652$ba624c82@nntp02.dk.telia.net !
Det handler om, hvor en form skal placeres, når den åbner!
Hej fra Lars
| |
Toke Eskildsen (13-01-2005)
| Kommentar Fra : Toke Eskildsen |
Dato : 13-01-05 15:58 |
|
Lars HT wrote:
> Den har du her news:41e67d4f$0$652$ba624c82@nntp02.dk.telia.net !
Jeg takker, men jeg kan desværre ikke tilgå grupper med vedhæftede
filer.
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 17:28 |
|
"Toke Eskildsen" <darkwing@daimi.au.dk> wrote in message
news:Xns95DDA28AE2937tokeeskildsen@130.133.1.4...
> Lars HT wrote:
>
>> Den har du her news:41e67d4f$0$652$ba624c82@nntp02.dk.telia.net !
>
> Jeg takker, men jeg kan desværre ikke tilgå grupper med vedhæftede
> filer.
Har sendt den til dig!
Lars
| |
Lars HT (13-01-2005)
| Kommentar Fra : Lars HT |
Dato : 13-01-05 14:59 |
|
"Toke Eskildsen" <darkwing@daimi.au.dk> wrote in message
news:Xns95DD95C255210tokeeskildsen@130.133.1.4...
> Lars HT wrote:
>
>> Jeg forstår dine forbehold, men i den sammenhæng, jeg skal bruge
>> det, tror jeg, at det går!
>
> Er det noget du kan vise et screenshot af? Jeg er meget skeptisk, men
> omvendt ville jeg gerne se et eksempel, hvor det virker at bryde med
> den etablerede standard.
Glemte egentlig begrundelse for valget af 5 checkboxe fremfor din løsning:
Eftersom formen, som skal åbnes, er firkantet, synes jeg, st det så bedst ud
med firkanter istedet for runde radiobtn's på billedet af skrivebordet!
Men selvfølgelig er alt smag og behag!
Hej fra Lars
| |
|
|