anoniem Geplaatst: 15 februari 2002 Delen Geplaatst: 15 februari 2002 Hoi DelphiFreakzzzzz, ik heb un probleempje. ik heb een veld van 25 checkboxen, deze staan 5 bij 5. De nummering gaat als volgt: CB00 CB01 CB02 CB03 CB04 CB05 CB06 CB07 Cb08 Cb09 Cb10 CB11 CB12 CB13 CB14 CB15 CB16 CB17 Cb18 Cb19 CB20 CB21 CB22 CB23 CB24 (CB = CheckBox) Nu wil ik hebben, zodra ik CB11 aanvink, dat dan de volgende Checkboxen ook aangevinkt moeten worden: CB06, CB10, CB12 en CB16. Dus met andere woorden, de 4 CB-en die er omheen liggen moeten dan ook aangevinkt worden. Maar indien er een CB die zich aan de kant bevindt. Bijv. CB05. Dan moeten CB00, CB06 en CB10 aangevinkt worden. Of CB24 bijv. dan moeten CB19 en CB23 aangevinkt worden. Maar indien er 1 of meerdere CB-en al aan staat gevinkt, dan moet deze uitgevinkt worden. - X X - - X - X X X X X - X - X - - X X - X X - X Als ik nu dus op CB07 klik, dan worden CB06 en CB12 aangevinkt en dan worden CB02, CB07 en CB08 uitgevinkt. En dan krijg je het volgende plaatje: - X - - - X X - - X X X X X - X - - X X - X X - X Kan iemand me helpen met dit probleem. Ik ben hier al een week mee bezig en ik kom er niet echt helemaal uit. Quote Link naar reactie
anoniem Geplaatst: 15 februari 2002 Auteur Delen Geplaatst: 15 februari 2002 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) CB01: TCheckBox; CB02: TCheckBox; CB03: TCheckBox; CB04: TCheckBox; CB05: TCheckBox; CB06: TCheckBox; CB07: TCheckBox; CB08: TCheckBox; CB09: TCheckBox; CB10: TCheckBox; CB11: TCheckBox; CB12: TCheckBox; CB13: TCheckBox; CB14: TCheckBox; CB15: TCheckBox; CB16: TCheckBox; CB17: TCheckBox; CB18: TCheckBox; CB19: TCheckBox; CB20: TCheckBox; CB21: TCheckBox; CB22: TCheckBox; CB23: TCheckBox; CB24: TCheckBox; CB25: TCheckBox; procedure FormShow(Sender: TObject); procedure CBclick(Sender: TObject); private { Private declarations } public { Public declarations } mouseclick : boolean; matrix: array[0..4, 0..4] of boolean; procedure ToggleCB(row,col:integer); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); var i,j:integer; begin j:=1; for i:=0 to Form1.ComponentCount-1 do if Form1.Components[i] is TCheckBox then begin (Form1.Components[i] as TCheckBox).Caption := IntToStr(j); matrix[(j-1) DIV 5, (j-1) MOD 5] := (Form1.Components[i] as TCheckBox).Checked; Inc(j); end; mouseclick := TRUE; end; procedure TForm1.CBclick(Sender: TObject); var i: integer; y,x:integer; begin if not mouseclick then exit; i := StrToInt( Copy( (sender as TCheckBox).Name, 3, 2) ); // checkbox nummer y := (i-1) DIV 5; // row x := (i-1) MOD 5; // column mouseclick := FALSE; if (x + 1) < 5 then ToggleCB(y, x+1); if (x - 1) >= 0 then ToggleCB(y, x-1); if (y + 1) < 5 then ToggleCB(y+1, x); if (y - 1) >= 0 then ToggleCB(y-1, x); mouseclick := TRUE; end; procedure TForm1.ToggleCB(row,col:integer); var cbname: string; cbnum: integer; cb: TCheckBox; begin cbnum := row*5 + col+1; if cbnum < 10 then cbname := 'CB0' + IntToStr(cbnum) else cbname := 'CB' + IntToStr(cbnum); if (FindComponent(cbname) is TCheckBox) then cb := FindComponent(cbname) as TCheckBox; cb.Checked := not cb.Checked; end; end. [ Dit Bericht is bewerkt door: P M op 2002-02-15 21:44 ] [ Dit Bericht is bewerkt door: P M op 2002-02-15 21:44 ] Quote Link naar reactie
anoniem Geplaatst: 18 februari 2002 Auteur Delen Geplaatst: 18 februari 2002 Thanx voor de oplossing, ik zal het zeker gaan uitproberen. Ik zal het laten weten als het lukt. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen