/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408182
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste