Thema: Delphi Progressbar

Einzelnen Beitrag anzeigen

Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Progressbar

  Alt 11. Apr 2006, 19:33
Was hast du mit der Progressbar bei obigem Code probiert? Ich sehe davon nix?

Naja, also ich würde evtl. eine der Zähler (c, d) verwenden.

Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  c, d: Integer;
  PixelColor: TColor;
begin
  if not OpenDialog.Execute then // Edit: Egal ob der User den Abbrechen-Knopf drückt oder nicht, du hast das Bild IMMER geöffnet.
    Exit;
  if not FileExists(OpenDialog1.Filename) then // Edit: Falls das Bild mtwl. nicht mehr da ist (relativ unwahrscheinlich, aber schaden tut es auch nicht sonderlich).
    Exit;
  Image1.Picture.LoadFromFile(OpenDialog1.FileName);
  
  PB.Max := Image1.Picture.Height * Image1.Picture.Width;
  PB.Step := 1; // oder war es StepBy?
  for c := 0 to Image1.Picture.Height do
    begin
      for d:=0 to Image1.Picture.Width do
        begin
          PixelColor := Image1.Canvas.Pixels[c, d];
          Image2.Canvas.Pen.Color := clblack;
          Image2.Canvas.Brush.Color := PixelColor;
          Image2.Canvas.Rectangle(c * 10, d * 10, c * c * 10, d * d * 10);
          PB.Step; // oder einfacher: PB.Progress := PB.Progress + 1; bzw. Inc(PB.Progress); Edit: Dann kannst du natürlich das Step/StepBy weglassen (s. o.).
        end;
    end;
end;
Du kannst natürlich auch den Max Wert noch durch 100 o. ä. teilen und via "if i mod 100 = 0 then" den Progress erhöhen. Dann wird das Teil nicht so oft neu gezeichnet.

Es steht dir sozusagen mehr oder weniger frei, wann du den Fortschritt erhöhst (könnte halt sein, dass das Bild nur 10 Pixel hoch und 4000 Pixel breit ist, dann wäre es etwas blöd den Fortschritt nur bei der C Schleife zu erhöhen).

Edit: Step/StepBy Hinweis + Code etwas formatiert.