Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi If - Abfrage variabel gestalten ? (https://www.delphipraxis.net/146558-if-abfrage-variabel-gestalten.html)

HolgerCW 22. Jan 2010 13:36


If - Abfrage variabel gestalten ?
 
Hallo zusammen,

Ich möchte das Gleichheitszeichen gegen eine Variabel austauschen. Nur wie mache ich das ?
Delphi-Quellcode:
If Test = 1 then
begin

 ...

end;
quasi irgendwie so:

Delphi-Quellcode:
Variabel := '=';

If Test Variabel 1 then
begin

 ...

end;
Gruss

Holger

guinnes 22. Jan 2010 13:44

Re: If - Abfrage variabel gestalten ?
 
Was mir dazu einfällt : Prozeduraler Parameter :
Delphi-Quellcode:
TVergleich : Function(A,B : Integer) : Boolean;

Function Groesser(A,B : Integer) : Boolean;
begin
  Result := A > B;
end;

Function Kleiner(A,B : Integer) : Boolean;
begin
  Result := A < B;
end;


....

var
  VergleichFunc : TVergleich;
begin
  VergleichFunc := Groesser;
  if VergleichFunc(a,b) then
  begin

divBy0 22. Jan 2010 13:46

Re: If - Abfrage variabel gestalten ?
 
Keine Ahnung ob das funktioniert.

Alternativ wäre sowas möglich:

Delphi-Quellcode:
case AbfrageTyp of
  0: if Test = 1 then ...
  1: if Test <> 1 then ...
  2: if Test > 1 then ...
  3: if Test < 1 then ...
end;

p80286 22. Jan 2010 13:50

Re: If - Abfrage variabel gestalten ?
 
Hallo Holger,

auf den ersten Blick ist Deine Anforderung nicht sehr intelligent, aber ich vermute Du hast Dir etwas dabei gedacht, darum kein Verweis auf case/</>......

Dunkel kann ich mich erinnern das zu TP-Zeiten schon einmal jemand dieses Ansinnen hatte und das wurde dann mit einer Vergleichsfunktion gelöst. etwa so:
Delphi-Quellcode:
 if VERGLEICHE(a,b).....

function VERGLEICHE (Wert1,Wert2);
begin
  if regewetter then
   if wert1=wert2 then result:=true;
  if Schnee then
   if wert1<>Wert2 then result:=true;
......
end;
Gruß
K-H

divBy0 22. Jan 2010 13:56

Re: If - Abfrage variabel gestalten ?
 
Zitat:

Zitat von p80286
Delphi-Quellcode:
 if VERGLEICHE(a,b).....

function VERGLEICHE (Wert1,Wert2);
begin
  if regewetter then
   if wert1=wert2 then result:=true;
  if Schnee then
   if wert1<>Wert2 then result:=true;
......
end;

Schöner ist dann aber:

Delphi-Quellcode:
 if VERGLEICHE(a,b).....

function VERGLEICHE (Wert1,Wert2);
begin
  if regewetter then
   result := wert1=wert2;
  if Schnee then
   result := wert1<>Wert2;
......
end;

p80286 22. Jan 2010 14:01

Re: If - Abfrage variabel gestalten ?
 
@Divby0
geschenkt! Noch wissen wir ja nicht was er wirklich will.

Gruß
K-H

divBy0 22. Jan 2010 14:04

Re: If - Abfrage variabel gestalten ?
 
Jo stimmt. :cheers:

s-off 22. Jan 2010 14:11

Re: If - Abfrage variabel gestalten ?
 
Zitat:

Zitat von p80286
geschenkt! Noch wissen wir ja nicht was er wirklich will.

Guter Stil hat nichts mit einer inhaltlichen Anforderung zu tun. Und da muss ich divBy0 recht geben, dass
Delphi-Quellcode:
result := wert1=wert2;
stilgerechter ist als
Delphi-Quellcode:
if wert1=wert2 then result:=true;
Da das allgemeingültig ist, sehe ich das trotz des OT hier gut aufgehoben.

Im Endeffekt wird wohl alles auf so eine Vergleichsfunktion hinauslaufen.

HolgerCW 22. Jan 2010 14:13

Re: If - Abfrage variabel gestalten ?
 
Zur Erklärung.

Ein und die selbe Procedure wird von zwei Buttons aus gestartet.

Wenn Sie von Button1 aus aktiviert wird, soll nach "=" abgefragt werden und wenn aus Button2 gestartet wird soll nach "<>" abgefragt werden. Es handelt sich um das zweite Abfragekennzeichen bei 'RW_VERSCHROTTUNG'.

Die Abfrage sieht so aus:

Delphi-Quellcode:
If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) then
begin

end;
Ich dachte mir das ich vor der Abfrage einfach folgendes mache:

Delphi-Quellcode:
With Sender as TBitBtn do
begin

  If Name = 'BitBtn1' then Kennzeichen := '=';
 
  If Name = 'BitBtn2' then Kennzeichen := '<>';

end;

If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] Kennzeichen Null) then
begin

end;
Nur geht das nicht.

Gruss

Holger

divBy0 22. Jan 2010 14:39

Re: If - Abfrage variabel gestalten ?
 
Das ist aber kein Problem. Definiere ein lokale Variable und schreibe für den einen Button eine 1 und für den anderen eine 2 und übergibt dies deiner Prozedur oder du übergibts der Prozedur gleich den Sender und wertest intern aus.

Delphi-Quellcode:
If Sender = BitBtn1 then...

If Sender = BitBtn2 then...

Edit: Natürlich ohne ''.

p80286 22. Jan 2010 14:40

Re: If - Abfrage variabel gestalten ?
 
Hallo Holger,

Ich geb zu die Idee hat was, so etwas ähnliches hätte ich manchmal auch gerne, aber bisher hat mich die Vergleichsfunktion immer abgeschreckt.
Dein Problem läuft aber doch auf ein simples (a=b) oder not(a = b) hinaus, das sollte doch über den Sender auswählbar sein?

Gruß
K-H

HolgerCW 22. Jan 2010 14:46

Re: If - Abfrage variabel gestalten ?
 
Das würde ja gehen, nur komplett sieht das so aus:

Delphi-Quellcode:
while DM_Geraete.Query1.Eof <> true do
begin

 For I := 1 to 3 do
 begin

  If (I=1) AND (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) then
  begin

   ...

  end;

 end;

 ... und hier kommt auch noch eine Menge ...

end;
Ich müsste quasi diese Schleife zweimal abbilden nur damit ich das Abfragekennzeichen ändere.

blauweiss 22. Jan 2010 14:47

Re: If - Abfrage variabel gestalten ?
 
Zitat:

Zitat von HolgerCW

Delphi-Quellcode:
With Sender as TBitBtn do
begin

  If Name = 'BitBtn1' then Kennzeichen := '=';
 
  If Name = 'BitBtn2' then Kennzeichen := '<>';

end;

If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] Kennzeichen Null) then
begin

end;


Hallo HolgerCW,

so würde es z.B. gehen:

Delphi-Quellcode:
  equalrequired := (Sender as TBitBtn).Name = 'BitBtn1';

If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND
   ((DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) = equalrequired) then
  begin

  end;
Gruß
blauweiss

divBy0 22. Jan 2010 14:55

Re: If - Abfrage variabel gestalten ?
 
Delphi-Quellcode:
If ((I=1) AND (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) AND (Sender = BitBtn1)) OR ((I=1) AND (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND (DM_Geraete.Query1['RW_VERSCHROTTUNG'] <> Null) AND (Sender = BitBtn2)) then
Ist das nicht das was du möchtest?

guinnes 22. Jan 2010 15:08

Re: If - Abfrage variabel gestalten ?
 
Nur mal so nebenbei :
Delphi-Quellcode:
while DM_Geraete.Query1.Eof <> true do
Sollte man tunlichst lassen : http://www.delphi-treff.de/tutorials...werten/page/4/

jfheins 22. Jan 2010 15:19

Re: If - Abfrage variabel gestalten ?
 
Vielleicht so in der Art:

Delphi-Quellcode:
procedure BitBitton1Click
begin
Calculate(true);
end;

procedure BitBitton2Click
begin
Calculate(false);
end;

procedure Calculate(a: Boolean)
begin
If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND ((DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) xor a) then
begin

end;
end;

p80286 22. Jan 2010 15:25

Re: If - Abfrage variabel gestalten ?
 
So ganz nebenbei gefragt, warum stecken beide Ergebnisse in einer Query

DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null
und
DM_Geraete.Query1['RW_VERSCHROTTUNG'] <> Null

Wenn nicht gerade tausende von Datensätzen durch die Gegend geschoben werden, sind meiner Meinung nach zwei Query-Ergebnisse sinnvoller.

@divBy0
Ich glaube, da muß noch etwas an den Klammern gefeilt werden?

Gruß
K-H

HolgerCW 22. Jan 2010 15:29

Re: If - Abfrage variabel gestalten ?
 
Welcher Typ ist denn "equalrequired" ?

Gruss

Holger

divBy0 22. Jan 2010 15:31

Re: If - Abfrage variabel gestalten ?
 
Boolean.

Highttower 22. Jan 2010 15:42

Re: If - Abfrage variabel gestalten ?
 
Zitat:

Zitat von jfheins
Vielleicht so in der Art:

Delphi-Quellcode:
procedure BitBitton1Click
begin
Calculate(true);
end;

procedure BitBitton2Click
begin
Calculate(false);
end;

procedure Calculate(a: Boolean)
begin
If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND ((DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) xor a) then
begin

end;
end;

warum binär mit xor vergleichen????

Schöner ist doch:
Delphi-Quellcode:
procedure Calculate(a: Boolean)
begin
If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND ((DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) AND a) then
begin

end;
end;
Es geht hier doch nur um einfache Boolsche Algebra -> Komplementärgesetze

HTH

Tobi

jfheins 22. Jan 2010 15:50

Re: If - Abfrage variabel gestalten ?
 
Zitat:

Zitat von Highttower
warum binär mit xor vergleichen????

Wieso binär? xor ist genauso ein boolscher Operator wie and, or und not
Zitat:

Schöner ist doch:
Delphi-Quellcode:
procedure Calculate(a: Boolean)
begin
If (DM_Geraete.Query1['RW_NUMMER'] <> Null) AND ((DM_Geraete.Query1['RW_VERSCHROTTUNG'] = Null) AND a) then
begin

end;
end;
Es geht hier doch nur um einfache Boolsche Algebra -> Komplementärgesetze
HTH
Tobi
Aha. und wenn a false ist, dann ist das ergebnis der query eh uninteressant ... ?

Das mit dem xor passt schon. Wenn man false übergibt, bleibt die Logik unverändert und wenn man true übergibt, wird die Logik umgekehrt ;)
http://de.wikipedia.org/wiki/Xor


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 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 by Thomas Breitkreuz