Gå til innhold

Velge komponent utifra integer


Anbefalte innlegg

Videoannonse
Annonse

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 av andersfk
Lenke til kommentar

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

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

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 av mysjkin
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...