Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problme mit Variablenabfrage (https://www.delphipraxis.net/43125-problme-mit-variablenabfrage.html)

ensacom 29. Mär 2005 15:10


Problme mit Variablenabfrage
 
Hallo, ich habe zwei globale Variablen FLAGPAUSE undLAGSTOP des Typs integer;

Wenn ich auf Button1 klicke übergebe ich den WERT "1" an FLAGPAUSE

Nun habe ich eine Schleife wo strings durchlaufen werden.

z.B.
REWIND
PLAY
STOP
PAUSE
EXIT

So, nun hat ja die globale Variable den Wert 1

Kann ich diesen Wert jetzt in der Schleife abfragen?

Ich hatte es so vor, geht aber nicht

for i := 0 to 10 do
begin
if 'FLAG'+String aus Schleife = 1 then showmessage('WERT ist 1');
end;

Kann mir einer sagen wie es funktioniert?

Danke

Binärbaum 29. Mär 2005 15:12

Re: Problme mit Variablenabfrage
 
Speichere die Variablen doch in einem Array of Integer. Dann kannst du in einer Schleife über den Index auf die Werte zugreifen :wink:

MfG
Binärbaum

ensacom 29. Mär 2005 15:15

Re: Problme mit Variablenabfrage
 
Hm, kannst du dass bitte etwas genauer erklären?
Ich weiß gerade nicht was du meinst.

Danke

Binärbaum 29. Mär 2005 15:44

Re: Problme mit Variablenabfrage
 
Na z.B. so:

Delphi-Quellcode:
var flags: array [0..10] of integer;
    i: Integer;
begin
  //hier kommen irgendwelche Werte in array
  ...
  for i := 0 to 10 do
  begin
    if flags[i] = 1 then showmessage('WERT ist 1');
  end;
end;

ensacom 29. Mär 2005 16:00

Re: Problme mit Variablenabfrage
 
Ok, aber ich verstehe jetzt nicht was ich damit anfangen soll,

die Variablen heißen ja z.B. FLAGPAUSE und FLAGSTOP
diesen werden entweder eine 1 oder eine 0 zugewiesen.

Mit deinem Beispiel kann ich ja nur abfragen ob 0 = 1 ist

Ich bräuchte also ein Array mit "FLAGPAUSE" und "FLAGSTOP" denen ich eben 0 oder 1 zuweisen kann.


Dann müsste ich abfragen

if name aus Schleife = Name aus Array und Name aus Array = 1 dann showmessage('Richtig') else showmessage('Falsch');


Hat dazu jemand einen Tipp?


Danke

gordon freeman 29. Mär 2005 16:03

Re: Problme mit Variablenabfrage
 
Zitat:

Zitat von ensacom
die Variablen heißen ja z.B. FLAGPAUSE und FLAGSTOP
diesen werden entweder eine 1 oder eine 0 zugewiesen.

Mit deinem Beispiel kann ich ja nur abfragen ob 0 = 1 ist

Was hindert dich denn daran:

Delphi-Quellcode:
//einem Wert 0 zuweisen
flags[i] := 0;

//einem Wert 1 zuweisen
flags[i] := 1;

Edit1:
Außerdem würde ich in diesem Fall sowieso ein
Delphi-Quellcode:
array of boolean
nehmen. Wenn du nur 1 oder 0 hast kannste auch direkt auf true/false abfragen :zwinker:

sECuRE 29. Mär 2005 16:05

Re: Problme mit Variablenabfrage
 
Hi,

das Beispiel war schon richtig. Du musst jetzt zB FLAGSTOP als 0 und FLAGPAUSE als 1, FLAGRESTART als 2 etc ansehen..
In deinem Array kannst du jedem dieser Werte 0 oder 1 zuweisen. Ein Array of boolean wäre dazu sogar noch besser geeignet, wenn du die Zahlen vorher als const definierst sieht es zudem noch schön aus:
Delphi-Quellcode:
const
  FLAGRESTART: integer = 0;
  FLAGPAUSE: integer = 1;
  FLAGSTOP: integer = 2;

procedure Test;
var flags:array[0..10] of boolean;
    c:integer;
begin
flags[FLAGRESTART]:=true; // restart auf true setzen (=1)
flags[FLAGPAUSE]:=false; // pause auf false setzen (=0)
for c:=0 to 10 do
  if (flags[c]) then
    ShowMessage('flag '+IntToStr(c)+' ist gesetzt')
  else ShowMessage('flag '+IntToStr(c)+' ist nicht gesetzt');
end;
Eventuell solltest du dir mal ein paar Grundlagen-Tutorials ansehen ;)

cu

Binärbaum 29. Mär 2005 23:23

Re: Problme mit Variablenabfrage
 
Nur so eine Idee von mir:
Wenn nur die Werte 0 und 1 erlaubt sind, könnte man z.B. auch eine einzige Variable vom Typ Cardinal nehmen und dann nur die entsprechenden Bits setzen:

Delphi-Quellcode:
const
  FLAGRESTART: Byte = 0;
  FLAGPAUSE: Byte = 1;
  FLAGSTOP: Byte = 2;
  //usw., kann nach Bedarf fortgesetzt werden...
  ...

function GetFlag(flags: Cardinal; flagindex: Byte): Boolean;
begin
  Result:= (flags and (1 shl flagindex))<>0;
end;

procedure SetFlag(var flags: Cardinal; flagindex: Byte; value: Boolean);
begin
  if (GetFlag(flags, flagindex) and not(value)) then
    flags:= flags -(1 shl flagindex)
  else if (value and not(GetFlag(flags, flagindex))) then
    flags:= flags + (1 shl flagindex);
end;
Ein Beispiel könnte dann so aussehen:
Delphi-Quellcode:
var myFlags: Cardinal;//<-- hier werden die Flags gespeichert
begin
  myFlags:= 0;
  SetFlag(myflag, FLAGRESTART, True);//FLAGRESTART auf 1 setzen
  SetFlag(myflag, FLAGPAUSE, False);//FLAGPAUSE auf 0 setzen
  //usw, je nach Bedarf
  ...
  if GetFlag(myflag, FLAGRESTART) then ShowMessage('FLAGRESTART ist gesetzt')
    else ShowMessage('FLAGRESTART nicht gesetzt');
end;
MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz