Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 25.09.10 15:13 
Hi,
versuche mich an so etwas hier
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  EinBild:= Tbitmap.create;
  NochEinBild:= Tbitmap.create;
  EinBild.LoadFromFile(Path+'image2.bmp');

repeat                                                // wie muss diese schleife aussehen?

  for i := 1 to 30 do
begin
  NocheinBild.LoadFromFile(Path+'Ordner1\'+'K'+inttostr(i)+'.bmp');
  Diff := CompareImages(EinBild, NocheinBild);
  end;
  if Diff=0 then begin
  label1.caption:='Die Karte ' + inttostr(i) + ' brachte vollständige übereinstimmung';
   end;
  einbild.free;
  nocheinbild.free;
      Zeit:=now+1.0*(1.0/86400.0);                                                     //Eine Sekunde warten
    while (now<=Zeit) do Application.processMessages;
until Diff=0;



Kriege nach dem ausführen immer folgenden Fehler ohne Quelle:
---------------------------
Debugger Exception Notification
---------------------------
Project Read1.exe raised exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Also ich will eine Schleife durchlaufen lassen, in der die Ähnlichkeit zwischen 30 sich oft ändernden Elementen geprüft wird. Das mache ich mit einer for-Schleife.
Alleine klappt das gut.
Doch wenn ich das jetzt sooft machen will, bis er in diesen 30 Elementen eins gefunden hat, was sich auf den Wert 0 geändert hat, wie mache ich das?
Hoffe das war nicht ein bisschen verwirrend ausgedrückt =)

Dankeschön
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 25.09.10 15:48 
Naja, du erstellst es vor der Schleife mit Create. In der Schleife gibst du es mit Free() frei. Dann ist das halt beim nächsten Schleifendurchlauf nil. Kurz: Es ist nicht mehr da. (nil ist ein Pointer auf die Adresse 0x0000...)

Übrigens: Formatiere mal deinen Quellcode.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
EinBild:= Tbitmap.create;
NochEinBild:= Tbitmap.create;
EinBild.LoadFromFile(Path+'image2.bmp');

repeat
  for i := 1 to 30 do
  begin
    NocheinBild.LoadFromFile(Path+'Ordner1\'+'K'+inttostr(i)+'.bmp');
    Diff := CompareImages(EinBild, NocheinBild);
  end;
  if Diff=0 then begin
    label1.caption :=
      'Die Karte ' + inttostr(i) + ' brachte vollständige übereinstimmung';
  end;
  einbild.free;
  nocheinbild.free;
  Zeit:=now+1.0*(1.0/86400.0);                                                       
  //Eine Sekunde warten
  //while (now<=Zeit) do Application.processMessages;
  Sleep(1000);
  Application.ProcessMessages; // Wie wär's damit?
until Diff=0;
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Sa 25.09.10 16:17 
Ok, danke das war ein Fehler von mehreren. Weiter oben waren noch ein paar weitere.
Jetzt habe ich aber das Problem, dass er glaube nicht mehr aus der Schleife rauskommt.
Er macht das, was er soll wenn der Wert 0 erreicht hat, aber das Fenster lässt sich dann aber immernoch bewegen.
Also wie kann ich ihn komplett aus der Schleife rausholen?
Und 2tens ich habe einen wirklich sehr, sehr langen Quelltext, den ich automatisieren will.
Der hat verschiedene Phasen.
Ich will aber nicht alles auf einen Button legen. Kann ich mehrere Button programmieren und die hintereinander setzten.
Also gibt es Befehle wie z.B buttonx.click?

Danke
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 25.09.10 16:27 
Zitat:
Also gibt es Befehle wie z.B buttonx.click?


Wüsste ich jetzt nicht. Aber du kannst einfach die verlinkte Prozedur aufrufen:

ButtonXClick(nil);
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 25.09.10 17:20 
Hey,

ButtonX.Click geht, ruft glaube intern auch nur das OnClick-Event auf. Aber wenn du nich wirklich einen Button brauchst, sondern nur den Quelltext aufteilen möchtest nimm eine Prozedur!

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 25.09.10 17:27 
Hallo,

bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:

*geschlossen*


Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.