![]() |
Delphi Bug? (for i := 1 to componente.width)
Also ich hab da wa seltsames festgestellt... vielleicht bin ich auch nur zu doof :)
und zwar hab ich z.B. eine PaintBox und möchte eine for Schleife machen die folgendermaßen aussieht:
Code:
so jetzt sollte er die Schleife solange wiederholen bis width erreicht ist... Delphi macht aber folgendes:
for i := 1 to paintbox1.width do begin
//tue irgendwas end; entweder geht Delphi gar nicht in die Schleife rein oder er ignoriert das Ende der Schleife und zählt einfach weiter und kommt nicht mehr raus... mach ich was falsch oder ist das ein fieser Delphi-Bug? das selbe passiert mit der Eigenschaft .Height Auch wenn ich diese Werte mit Hilfsvariablen zwischenspeichere:
Code:
w := paintbox1.width;
for i := 1 to w do begin ... end; |
Bei mir klappt das problemlos:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i:= 1 to PaintBox1.Width do begin PaintBox1.Canvas.Pixels[i,random(PaintBox1.Height)]:=1; end; end; |
mhhh.... :|
kann das vielleicht mal einer mit Delphi6 Enterprise versuchen... vielleicht hat sich da ja irgendwas eingeschlichen... ich glaube nicht das ich bei so einer einfachen Anweisung Fehler mache... komisch ist das aber schon :shock: |
Ich bin grad auf der Arbeit und hab das mit Delphi 7 getestet, nicht mit Delphi 4.
Ich hab die Vermutung das der Fehler eher innerhalb der Schleife liegt, es wäre hilfreich wenn du den teil mal posten könntest. |
Hallo Maa83,
häufig kommt sowas zustande, wenn (aus Versehen) der Schleifenindex in der Schleife verändert wird. |
Dank euch erst mal
aber hilft mir alles nix i wird nicht verändert! der Fehler tritt bei mir immer auf egal was ich in der Schleife mache z.B. auch bei dieser hier:
Code:
BUHU :cry:
x := 0;
for i := 1 to paintbox1.width do begin inc(x); end; ShowMessage(x); Ich hab das bei mir daheim und auch im Geschäft getestet (jeweils Delphi6 Enterprise) |
Hallo Maa83
Ich habe diesen Code mal getestet und läuft bei mir super! Ich habe Delphi 6 Enterprise + update 2 (Build 6.240)
Delphi-Quellcode:
Gruß Tino
procedure TForm1.Button1Click(Sender: TObject);
var x,y,i: Integer; begin x := 0; for i := 1 to paintbox1.width do begin inc(x); end; ShowMessage(inttostr(x)); end; |
mhhhh...
kapier ich nicht... naja vielleicht klappts ja irgendwann Delphi ist sicher sauer auf mich :) wisst ihr eigentlich wie beschissen 800x600 ist WÜRG muss ein Programm gerade bei dieser Auflösung testen da unserer Kunden diese Auflöung haben WÄHHHH also dann wünsch ich noch schönes :coder: |
Hallo Maa83,
füge doch bitte noch einmal folgende Zeile ein uns poste, was ausgegeben wird:
Delphi-Quellcode:
ShowMessage(IntToStr(paintbox1.width));
|
es wird die richte Zahl ausgegeben (in diesem Fall 485)
wenn ich die Zahl ganz normal in der Schleife angeben funktioniert es natürlich auch nur mit .width eben nicht |
HALLO IHR TRÄUMER, (Maa83 ausgenommen :) )
0-basierte Listen sind in Delphi üblich, wenn auch nicht Pflicht, dass heisst, dass das erste Element nicht den Index 1, sondern den Index 0 hat! Aus
Delphi-Quellcode:
wird also
for i:= 1 to PaintBox1.Width do
Delphi-Quellcode:
und schon läuft alles, zumindest bei mir ;)
for i:= 0 to PaintBox1.Width-1 do
...:cat:... |
Einfahc mal ein Gedanke:
Da sich die Width-Eigenschaft während des Durchlaufs der Schleife auch ändern kann, solltest Du vielleicht mal probieren, vorher den Wert von Width einer variablen zuzuweisen und dann die Schleife bis zu dieser Variable laufen zu lassen !!! Gruß, Helld |
Zitat:
...:cat:... |
@sakura: Also das mit index 0 oder 1 ist ja eigentlich wurscht (schreibst du ja auch das es nicht notwendig sondern nur üblich ist)...
Ich habs auf jeden Fall nochmal ausprobiert und jetzt klappts auf einmal !? Ich hab am Code nichts verändert :( Delphi will mich verarschen :? Naja danke für eure Hilfe ich werd jetzt mal weiter :coder: |
Zitat:
...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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