Avatar billede enuren Nybegynder
30. januar 2003 - 14:30 Der er 11 kommentarer

Udførsel af kode fra variabel

Mit aktuelle problem er at jeg har en variabel indeholdende f.eks "checkbox1.checked". Spørgsmålet er så om hvordan jeg lettest kan bruge dette i en sammenligning (if checkbox1.checked=1 then...). Jeg kan sagtens omgå problemet på en række måder, men jeg støder på det igen og igen, så jeg ønsker en løsning svarende til $$variabel=1 i php. Altså hvis indholdet af variablen evalueret er lig 1...
Avatar billede enuren Nybegynder
30. januar 2003 - 14:32 #1
hmmm. denne skulle have ligget under programmering - delphi.....
Avatar billede nikolajdu Nybegynder
30. januar 2003 - 14:33 #2
Du har jo stor set skrevet det selv...

if(checkbox1.checked){
alert("den er sgu tjekket du!");
}
Avatar billede nikolajdu Nybegynder
30. januar 2003 - 14:36 #3
nåhhhh det er deplhi vi tal om. Jeg flytter spørgsmåler over i den anden kategori.
Avatar billede websmith Nybegynder
30. januar 2003 - 14:36 #4
Nu kender jeg ikke lige delphi, men hvis du har det liggende i en tekstvariabel, så kan du parse feltet. Dvs. et eller andet med:

feltnavn= Left(variable,".")
action=Right(variable,".")

feltet=GetField(feltnavn)
select case action
case "checked"
  if(feltet.checked=true) then
  ... kode
case "empty"
  ...
end select

Det er selvølgelig pseudo kode, men måske du forstår min mening.
Avatar billede nikolajdu Nybegynder
30. januar 2003 - 14:37 #5
sikke nogle stavefejl...
Avatar billede websmith Nybegynder
30. januar 2003 - 14:38 #6
Det forudsætte selvfølgelig at der er en metode til at få fat på et feltnavn ved at kende navnet.
Avatar billede websmith Nybegynder
30. januar 2003 - 14:38 #7
.ditto her :)
Avatar billede enuren Nybegynder
30. januar 2003 - 14:51 #8
Citat:
"Det forudsætte selvfølgelig at der er en metode til at få fat på et feltnavn ved at kende navnet."

Det er lige nøjagtigt sådan en metode jeg søger:)
Avatar billede enuren Nybegynder
30. januar 2003 - 14:56 #9
Her er et eksempel der kan illustrere det.

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
location : string;
begin
for i:=1 to 34 do
    begin
    location := 'checkbox'+inttostr(i)+'.checked';
    showmessage(location);
    if (location)=1 then
      begin
      edit1.text:=edit1.text + inttostr(i) + 'a=1&';
      end
      else
      begin
      edit1.text:=edit1.text + inttostr(i) + 'a=0&';
      end;
    end;
    edit1.text[170]:=' ';
end;

end.

If parametren er ugyldig da den sammenligner strengen med 1.... Jeg søger en metode, der får den til at sammenligne, den egenskab strengen henviser til, med 1. :) (Der er enkle måder at omgås det på her, men jeg kunne godt bruge en sådan metode i mange andre tilfælde.)

I php ville man kunne gøre således:
$variabel1="et eller andet";
$variabel2="variabel1";
$variabel3=$$variabel2;

Nu er variabel1=variabel3, variabel2 er altså bare brugt som pointer.
Avatar billede websmith Nybegynder
30. januar 2003 - 14:59 #10
Det var ikke lige hvad du skrev, men mon ikke der er en. Måske en Delphi ekspert kan svare på det :)
Avatar billede doctorseb Nybegynder
01. februar 2003 - 18:51 #11
Der er flere muligheder. En ofte benyttet metode er, at padle igennem controller (components) for en given parent. Har du f.eks. placeret 34 checkbox'e på en form, kan du referere til dem sådan her:

idx: integer;
C: TCheckBox;

for idx := 0 to DinForm.ControlCount - 1 do
begin
  if DinForm.Controls[idx] is TCheckBox then
  begin
    C := TCheckBox(DinForm.Controls[idx]);
    if C.Checked then ....
  end;
end

Dette svarer til dine PHP-pointer operationer (som jeg i øvrigt ikke er bekendt med). Jeg er fog ikke helt klar over, om det er det svar du ønsker..?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester