Hi!
Also ich will 2 Bilder rotieren (ist eig. eine dynamische Anzahl).
Da allerdings je nach Userwunsch per Checkbox gefragt wird, ob rotiert werden soll, frag ich das in einer Schleife ab.
Die Prozedur sieht so aus(die ShowMessage ist zur Fehlersuche):
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
var
n: integer;
begin
for n:=0 to high(buttons) do
begin
if (n<=Form1.ComboBox1.ItemIndex+1) AND (checkboxen[n].Checked=true) then
begin
Form1.Rotate(bitmaps[n]);
ShowMessage(IntToStr(n));
end;
end;
end;
Ich bekomm durch die ShowMessage sowohl eine 0 als auch eine 1.
Das heisst, die Schleife wird 2x durchlaufen, so wie es gewollt ist.
Die Funktion wird auch tatsächlich 2x ausgeführt.
Aber wieso läuft die Progressbar nur einmal?
Die Position setz ich wieder auf 0 zurück!
Nach dem 1. Durchlauf bleibt die ProgressBar einfach auf 0 und es wird nichts gemacht. (sprich es wird nicht rotiert!!)
Die Rotate-prozedur ist folgende(vielleicht nicht die beste und eleganteste lösung):
Delphi-Quellcode:
procedure TForm1.Rotate(src: TBitmap);
var
i,j: integer;
bmp: TBitmap;
begin
Form1.ProgressBar1.Position := 0;
Form1.ProgressBar1.Min := 0;
Form1.ProgressBar1.Max := src.Width;
bmp := TBitmap.Create();
bmp.Width := src.Width;
bmp.Height := src.Height;
for i:=0 to src.Width do
begin
Form1.ProgressBar1.StepIt;
for j:=0 to src.Height do
begin
bmp.Canvas.Pixels[bmp.Width-i,bmp.Height-j] := src.Canvas.Pixels[i,j];
end;
end;
src.Assign(bmp);
bmp.Free;
Form1.ProgressBar1.Position := 0;
end;
Die Funktion wird wie gesagt 2x ausgeführt, aber nur 1x wird rotiert (beim 2. scheint er die i und j schleifen nicht mehr durchzulaufen)
hat jemand eine idee warum das sein kann?
Ich hab nun alles durchgeschaut und finde keinen fehler
air
(sorry für den etwas langen post)