JPG-Bild in Form anzeigen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Fraenzken
Beiträge: 24
Registriert: Mi 10. Feb 2016, 10:30

JPG-Bild in Form anzeigen

Beitrag von Fraenzken »

Hallo,

ich versuche momentan, ein JPG-Bild zu skalieren und in einem Form anzeigen zu lassen. Das funktioniert auch problemlos, wenn ich die Skalierung per Button anstoße:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Pic : TPicture;
begin
  Pic:= TPicture.Create;
  try
    Pic.LoadFromFile(ParamStr (1));
    Self.Canvas.StretchDraw(Rect(0,
                                 0,
                                 Pic.Width div 4,
                                 Pic.Height div 4),
                            Pic.Bitmap);
  finally
    Pic.Free;
  end;
end;


Wenn ich stattdessen aber ein neues Form öffne und das Bild dort anzeigen möchte, klappt es nicht:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Pic : TPicture;
begin
  Pic:= TPicture.Create;
  try
    Pic.LoadFromFile(ParamStr (1));
    Form2.Canvas.StretchDraw(Rect(0,
                                 0,
                                 Pic.Width div 4,
                                 Pic.Height div 4),
                            Pic.Bitmap);
    Form2.ShowModal;
  finally
    Pic.Free;
  end;
end;     
 


Könnt ihr mir sagen, woran das liegt?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: JPG-Bild in Form anzeigen

Beitrag von theo »

Auf einen (flüchtigen) Canvas darf man nur im OnPaint Ereignis zeichnen.
Bei ShowModal hat der das schon "vergessen".

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: JPG-Bild in Form anzeigen

Beitrag von Mathias »

Idealerweise sieht dies dann so aus:

Code: Alles auswählen

var
  Pic: TPicture;
 
{ TForm2 }
 
procedure TForm2.FormCreate(Sender: TObject);
begin
  Pic := TPicture.Create;
  Pic.LoadFromFile('project1.ico');
//  Pic.LoadFromFile(ParamStr(1));
end;
 
procedure TForm2.FormDestroy(Sender: TObject);
begin
  Pic.Free;
end;
 
procedure TForm2.FormPaint(Sender: TObject);
begin
  Canvas.StretchDraw(Rect(0,
    0,
    Pic.Width div 4,
    Pic.Height div 4),
    Pic.Bitmap);
end


Es bringt nichts, im OnPaint die die Picture jedesmal neu zu laden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Fraenzken
Beiträge: 24
Registriert: Mi 10. Feb 2016, 10:30

Re: JPG-Bild in Form anzeigen

Beitrag von Fraenzken »

Danke, hat perfekt geklappt!

Antworten