e321 Skrevet 22. januar 2005 Del Skrevet 22. januar 2005 Har en integer som jeg kaller number. Denne skal velge om jeg jeg skal "checke" Form1.checkbox 1/2/3/4 osv. Hvordan kan jeg få til dette? Lenke til kommentar
andersfk Skrevet 23. januar 2005 Del Skrevet 23. januar 2005 (endret) I følge denne siden er det ingen måte du direkte kan koble nummeret ditt til en komponent, men det finnes en litt mer komplisert måte. unit Unit1; interface uses Windows, SysUtils, Forms, StdCtrls, Controls, Classes; type TForm1 = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure CheckCheckBox(number : integer); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.CheckCheckBox(number : integer); var CompName : string; i: integer; begin // Setter navnet til komponenten som skal finnes CompName := 'CheckBox' + IntToStr(number); for i := 0 to ComponentCount - 1 do // Er komponenten en CheckBox - og har den riktig navn? if (Components[i] is TCheckBox) and (Components[i].Name = CompName) then begin //Typecasting og haking av checkbox. (Components[i] as TCheckBox).Checked := True; // Slutter for-loop når komponenten er funnet break; end; end; procedure TForm1.Button1Click(Sender: TObject); begin //Parameteren her er nummeret til CheckBox'en CheckCheckBox(4); end; end. Var det noe sånt du mente? Endret 23. januar 2005 av andersfk Lenke til kommentar
mysjkin Skrevet 24. januar 2005 Del Skrevet 24. januar 2005 Litt uklart for meg hva du vil, men slik jeg forstår deg, ville jeg løst dette med å se på integer-variablen som en streng med bits og så tilordnet en checkbox for hver bit Dersom man kan putte checkboxene inn i et array, skulle du kunne sette dem med noe liknende av (pseudokode, jeg orker ikke starte opp delphi og opprette det som trenges nå... Håper det er forståelig hva jeg mener.) {checkboxarray: arrayet med bokser i, 0-basert} {tallet: integervariabelen som du setter boksene fra} {var checked: Boolean; } nbox=10; {For 10 bokser, i praksis: les ut antallet fra lengden på arrayet} for i:=nbox-1 to 0 step -1 do {funker det med step? må evt bruke en annen type løkke} begin checkboxarray[i].checked:=false; {Kan evt kuttes ut dersom du vet at de ikke er 'checked' eller om du bare ønsker å legge til } expverdi:=2**i; if tallet > expverdi then begin checkboxarray[i].checked:=true; tallet:=tallet-expverdi; end; end Mulig at dette kan gjøres på en matematisk tøffere måte, men dette burde funke... (Håper jeg...) M. Lenke til kommentar
e321 Skrevet 24. januar 2005 Forfatter Del Skrevet 24. januar 2005 Hm... har ikke tid til og teste din mysjkin akkurat nå, men gjør det snart. Den første funket nesten.. Fikk listout of index eller hva det heter. Skal prøve og fikse litt på det så det passer mitt prosjekt, Takker begge 2 Lenke til kommentar
mysjkin Skrevet 25. januar 2005 Del Skrevet 25. januar 2005 (endret) Måtte mekke litt før det funka, men nå ligger en forklaring og en zippet demo på http://sickel.net/cbdemo.html Jeg hadde faktisk bruk for akkurat denne funksjonaliteten i et program jeg jobber med, men da jeg så på det sist, tenkte jeg alt for komplisert og la det til side, så takk til e321 som fikk meg til å tenke i de baner igjen M. Edit: Lagt til litt. Endret 25. januar 2005 av mysjkin Lenke til kommentar
e321 Skrevet 25. januar 2005 Forfatter Del Skrevet 25. januar 2005 Takker for linken Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå