Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe bei If then else (https://www.delphipraxis.net/133978-hilfe-bei-if-then-else.html)

Asatru 13. Mai 2009 10:11


Hilfe bei If then else
 
Ich habe folgendes Problem. Ich habe in einer schleife extra noch eine If then else abfrage drin. Nur komisch ist, wenn die Aussage unwahr ist macht er alles wie er sollte, aber im nächsten Loop ist die Aussage dann Wahr, aber trotzdem werden die Befehle von Else ausgeführt!

Habsch irgendwie ein Denkfehler?

Delphi-Quellcode:
  if RadioButton2.Checked then
    begin
      for i := 1 to 2 do
        begin
          {anweisung}

          if xxx and xxy then
                begin
                  if xxx = Text then
                    begin
                     {Anweisung}
                    end
                  else
                      PostMessage(handle4, WM_KEYUP, Integer('P'), 0);
                     {Selbe Anweisung wie bei wahr}
                end;
        end;
    end;
[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
[edit=mkinzler] Mfg, mkinzler[/edit]

DeddyH 13. Mai 2009 10:13

Re: Hilfe bei If then else
 
Zitat:

Zitat von Asatru
aber im nächsten Loop ist die Aussage dann Wahr

Bist Du Dir da ganz sicher?

mkinzler 13. Mai 2009 10:15

Re: Hilfe bei If then else
 
Da ich nich weiss, was genau gemacht wird, kann ich zum eigentlichen Problem nichts sagen aber schreibe besser

Delphi-Quellcode:
if xxx <> Text then
    PostMessage(handle4, WM_KEYUP, Integer('P'), 0);
{Anweisung}

quendolineDD 13. Mai 2009 10:17

Re: Hilfe bei If then else
 
Dann hättest du die Abfrage lediglich negiert und müsstest dann deinen vorherigen Else-Block mit dem obigen vertauschen.
Edit:
und wenn bei Wahr und Falsch jeweils selbiger Code steht, kannst du diesen auch aus den Blöcken der IF-Abfrage herausnehmen.

Asatru 13. Mai 2009 10:27

Re: Hilfe bei If then else
 
Ok, dann geh ich mal näher ins Detail

Am Anfang werden handles und texte von einer Anwendung geholt Es wird geprüft ob eine Combobox ein bestimmten text hat

Sollte der Text der Combobox eben grad xxx soll er eben seine anweisungen machen

wenn nicht, kommt dann else ins spiel und drückt die taste P um das bestimmte wort zu bekommen und dann weiterzumachen.
Am Anfang ist der Wert immer unwahr und er macht im ersten zug ihm eben war aber bei der wiederholung nutz er wieder else


selbe ist wenn

Delphi-Quellcode:
if xxx and xxy then
                begin
                  if xxx = Text then
                    begin
                     {Anweisung}
                    end
                  if xxx <> Text then
                    begin
                     PostMessage(handle4, WM_KEYUP, Integer('P'), 0);
                     {Anweisung}
                    end;
drückt er jedesmal P obwohl der text eigentlich wahr ist!

mkinzler 13. Mai 2009 10:32

Re: Hilfe bei If then else
 
Gut dass du die Verbesserungsvorschläge ( auch wenn mehrmals der selbe komtt, einfach ignorierst).
Da wir nicht wissen, was der Code im Detail macht, wäre eine hilfreiche Antwort Zufall oder Glück

Asatru 13. Mai 2009 10:39

Re: Hilfe bei If then else
 
lÖL hab doch gesagt das er am anfang eben Handles (combobox und textbox) von einer anwendung holt. wennn er diese Handles findet soll er eben Abgleichen ob der text von der bsp Combobox wahr ist. Wenn ja dann soll er eben sagen wir nun angeben. Wenn unwahr ist drückt er eben den Buchstaben P in der Combobox.

In der Combobox gibt es 2 wörter die mit P anfangen

Private und Party am anfang steht meistens die Combobox auf normal, deshalb ist der erste was das prog macht P drücken und er kommt uff private (Else anweisung)

im nächsten loop hingegen musste er ja feststellen das Combobox auf privat stehen und somit die Anweisung vor else ablaufen, das macht er aber nicht, er erkennt sie immer als unwahr an!

DeddyH 13. Mai 2009 10:42

Re: Hilfe bei If then else
 
Prüfe doch Deine Aussage ("im 2. Durchlauf ist das immer wahr") erst einmal nach, ich glaube das nämlich nicht.

Asatru 13. Mai 2009 10:46

Re: Hilfe bei If then else
 
Ich glaube du hast recht, da er ja vom ersten lauf den Getwintext noch im string selbst drin hat meinst du das damit?

Tyrael Y. 13. Mai 2009 10:47

Re: Hilfe bei If then else
 
Wahrscheinlich ein Problem mit case-sensitiv...rate ich mal so in den Raum rein

Delphi-Quellcode:
if SameText(ComboBox999.Text, meinVergleichstext) then
begin
  ...
end
else
begin
  ...
end;

DeddyH 13. Mai 2009 10:48

Re: Hilfe bei If then else
 
Setz doch einmal einen Breakpoint und schau Dir den Inhalt der Variablen an. Evtl. liegt es nur an Groß- oder Kleinschreibung oder etwas in der Art.

Asatru 13. Mai 2009 11:01

Re: Hilfe bei If then else
 
erste durchlauf OK
zweiterdurchlauf hinter else stoppt er und es wird mir als Wert angezeigt 'Private'#0

DeddyH 13. Mai 2009 11:03

Re: Hilfe bei If then else
 
Dann versuch es mal mit trim().

[edit] Btw: Handelt es sich um Controls in einer Fremdanwendung? [/edit]

Asatru 13. Mai 2009 11:09

Re: Hilfe bei If then else
 
Ok da habsch mich oben net richtig ausgedrückt ja es ist eine fremde anwendung!

MFG

Edit: Kann es sein das ich den Wert aus GetWIntext wieder löschen muss nach jeden Loop? oder ist das automatisch?

mleyen 13. Mai 2009 11:18

Re: Hilfe bei If then else
 
Gibst du der Anwendung überhaupt Zeit alles abzuarbeiten?
Poste doch mal den kompletten Code mit evtl. der Fremdanwendung, dann müssen wir nicht mehr rumraten.

Asatru 13. Mai 2009 11:31

Re: Hilfe bei If then else
 
ja delay sind drin

Delphi-Quellcode:
var
   Text: String;
Begin
   Text:= 'Private';

{andere Anweisungen}

  if RadioButton2.Checked then //Private
    begin
      for i := 1 to 10 do
        begin
          handle1 := FindWindow('wxWindowClassNR', PCHar(Edit1.Text));
          handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_PANEL1');
          handle1 := FindWindowEx(handle1, 0, 'wxWindowClass', 'ID_LISTBOOK1');
          handle1 := FindWindowEx(handle1, 0, 'wxWindowClassNR', 'ID_SCROLLEDWINDOW6');
          handle4 := GetDlgItem(handle1, 428);
          handle3 := GetDlgItem(handle1, 430);
          handle2 := GetDlgItem(handle1, 426);

          if (handle1 <> 0) and (handle2 <> 0) then
                begin
                  if trim(GetWintext(handle4)) = Text then
                    begin
                      showmessage(Getwintext(handle4));
                      if EscPressed('Anwendung abbrechen ?') then Break;
                      delay(6000);
                    end
                  else
                    begin
                      Showmessage(Getwintext(handle4));
                      PostMessage(handle4, WM_KEYUP, Integer('P'), 0);
                      if EscPressed('Anwendung abbrechen ?') then Break;
                      delay(6000);
                    end;
                end;
        end;
    end;

DeddyH 13. Mai 2009 11:33

Re: Hilfe bei If then else
 
Zitat:

Spam abbrechen ?
:shock:

Asatru 13. Mai 2009 11:45

Re: Hilfe bei If then else
 
Jup wusste net wie ich es sonst nennen soll, später wird die schleife entfernt und eben nur gechekd ob wert stimmt und dann via hotkeys eben vorbestimmte texte rausgeschickt so wie es viele onlinespiele schon dabei haben nur das was ich nebenbei spiele nicht, gibt nur ein programm womit man was schreiben kann!

DeddyH 13. Mai 2009 12:10

Re: Hilfe bei If then else
 
Soll das eine Art Bot werden?

Asatru 13. Mai 2009 12:58

Re: Hilfe bei If then else
 
Nein. Es gibt online Spiele wo man via Shortcut vordefinierte Wortgruppen in den Chat bringen kann. Für mein Spiel ist es nicht möglich, aber es gibt ein prog was Privat und ähnliches per Handeinageb senden kann und er texte auch anzeigt die geschrieben wurde! Son Spambot zu schreiben ist ja keen ding, da kannsch das och vordefinieren! Es geht mir eben halt nur drum um via Tastendruck einmal einen Vordefinierten text zu senden!

Schleife habsch nur aus jucks gesetzt da wenn ich bsp. anderen Shortcut drücke er obwohl aussage wahr ist trotzdem den Buchstaben drückt obwohl er ihn nicht drücken müsste!

DeddyH 13. Mai 2009 13:05

Re: Hilfe bei If then else
 
Wenn sich das so äußert, ist Deine Abfrage falsch. Trimme einmal beide Werte, wenn es dann immer noch nicht stimmt, weiß ich es auch nicht.

Asatru 13. Mai 2009 13:27

Re: Hilfe bei If then else
 
ahh danke nachdem ich beides getrimmt habe gings. Kannste mir nochmal sagen worans da lag? den in meinem String Text gabs doch eigentlich keene Leerzeichen oder sonstiges!

MFG

DeddyH 13. Mai 2009 13:29

Re: Hilfe bei If then else
 
Aber vielleicht im ausgelesenen ;)

Asatru 13. Mai 2009 13:31

Re: Hilfe bei If then else
 
den ausgelesenen habsch ja vorher auch schonmal getrimmt gehabt *fg*

Delphi-Quellcode:
if trim(GetWintext(handle4)) = trim(String('Private'#0)) then
so funzt das nu aber was bewirkt bitte sehr das #0 ???

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]

DeddyH 13. Mai 2009 13:35

Re: Hilfe bei If then else
 
#0 ist das Stringende-Zeichen bei nullterminierten Strings, deshalb heißen die auch so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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