Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild auf TImage kacheln? (https://www.delphipraxis.net/148181-bild-auf-timage-kacheln.html)

ryLIX 24. Feb 2010 11:29


Bild auf TImage kacheln?
 
Gibt es eine Möglichkeit ein Bild auf einem TImage zu kacheln?
Hab schon einiges Probiert aber das gibt nicht den gewünschten Effekt. :?

s.h.a.r.k 24. Feb 2010 11:40

Re: Bild auf TImage kacheln?
 
guckst du hier

ryLIX 24. Feb 2010 11:49

Re: Bild auf TImage kacheln?
 
Hmm repeat -.- ich hab nach kacheln gesucht wie ein doofer ...

Jetzt ist folgendes:
PaintBox1 ist alTop und im OnPaint zeichne ich den Hintergrund:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  img: TJPEGImage;
  Count, I, X, Y : Integer;
begin
  img := TJPEGImage.Create;
  img.LoadFromFile('back.jpg');
  Count := round(PaintBox1.Width / img.Width);
  for I := 0 to Count do
  begin
    X := PaintBox1.Left + round(img.Width * I);
    Y := PaintBox1.Top;
    PaintBox1.Canvas.Draw(X, Y, img);
  end;
  img.Free;
end;
Aber kein Bild O.o die Zeichenfläche bleibt einfach leer...

Mit dem gleichen Code habe ich sonst Bilder auf Panels gekachelt.
Aber leider Ignorieren Controls mit Tranzparenz Panels im Hintergrund...

himitsu 24. Feb 2010 11:57

Re: Bild auf TImage kacheln?
 
X und Y werden relativ zur Paintbox gesehn, also benötigt man hier kein Offset.
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  img: TJPEGImage;
  I: Integer;
begin
  img := TJPEGImage.Create;
  try
    img.LoadFromFile('back.jpg');
    for I := 0 to PaintBox1.Width div img.Width - 1 do
      PaintBox1.Canvas.Draw(img.Width * I, 0, img);
  finally
    img.Free;
  end;
end;
aber Besser wäre es so
Delphi-Quellcode:
procedure TForm1.Form1Create(Sender: TObject);
begin
  img := TJPEGImage.Create;
  img.LoadFromFile('back.jpg');
end;

procedure TForm1.Form1Destroy(Sender: TObject);
begin
  img.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to PaintBox1.Width div img.Width - 1 do
    PaintBox1.Canvas.Draw(img.Width * I, 0, img);
end;

s.h.a.r.k 24. Feb 2010 12:00

Re: Bild auf TImage kacheln?
 
Zitat:

Zitat von himitsu
aber Besser wäre es so
Delphi-Quellcode:
procedure TForm1.Form1Create(Sender: TObject);
begin
  img := TJPEGImage.Create;
  img.LoadFromFile('back.jpg');
end;

procedure TForm1.Form1Destroy(Sender: TObject);
begin
  img.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to PaintBox1.Width div img.Width - 1 do
    PaintBox1.Canvas.Draw(img.Width * I, 0, img);
end;

Wieso das denn? :gruebel: So muss ich ja eine "globale" Varibale in der Klasse halten, die erst gegen Ende freigegeben wird. Ich würde es noch verstehe, wenn das Image mehrfach im Code verwendet werden würde, was es aber nicht wird.

PS: Über TImage und kacheln bin ich auf den Thread gestoßen :) es gab nur zwei Treffer: Hier im Forum suchentimage kacheln

Matze 24. Feb 2010 12:07

Re: Bild auf TImage kacheln?
 
Zitat:

Zitat von s.h.a.r.k
Wieso das denn? :gruebel:

Damit nicht bei jedem OnPaint-Ereignis das Image erzeugt und das JPG-Bild geladen werden muss. Das OnPaint-Ereignis wird nicht nur einmalig aufgerufen.

ryLIX 24. Feb 2010 12:43

Re: Bild auf TImage kacheln?
 
Ok jetzt klappts.
Vielen dank für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz