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