![]() |
EIn picture im image öfter vorkommen lassen
hi leutz!
folgendes: die form sei 100x100 groß, mein image darauf auch, das geladene bild jedoch mal 10x10... kann man es machen, dass sich das bild in der image öfter wiederholt? wenn ja, wie? |
Re: EIn picture im image öfter vorkommen lassen
Hi,
kacheln musst du das Bild "manuell", z.B. im OnCreate des Formulars. Da Änderungen an TImage.Canvas ausahmsweise permanent sind, könntest du es z.B. so machen:
Delphi-Quellcode:
var tmpBMP: TBitmap;
i,j: Integer; begin tmpBMP := TBitmap.Create; try tmpBMP.LoadFromFile('C:\kachel.bmp'); for i:=0 to (Image1.Width div tmpBMP.Width) do for j:=0 to (Image1.Height div tmpBMP.Height) do begin Image1.Canvas.Draw(i * tmpBMP.Width, j * tmpBMP.Height, tmpBMP); end; finally tmpBMP.Free; end; end; |
Re: EIn picture im image öfter vorkommen lassen
kewl, THX!
PS: es klappt sogar ^^ |
Re: EIn picture im image öfter vorkommen lassen
geht sowas nur mit der tbitmap?
wenn ja, wie kann man an tbitmap ein tpicture übergeben? ( will da kein BMP reinladen ) |
Re: EIn picture im image öfter vorkommen lassen
Da gibt es einen Trick.
Delphi-Quellcode:
Das habe ich naemlich mal bei Experts-Exchange gefragt.
unit tiled;
interface uses Windows, Classes, Controls, Graphics, ExtCtrls; type TTiledImage = class(TImage) private FTiled: Boolean; FBmp: TBitmap; procedure SetTiled(const Value: Boolean); protected procedure Paint; override; public constructor Create(AOwner: TComponent); override; published property AutoSize default False; property Tiled: Boolean read FTiled write SetTiled default True; end; procedure Register; implementation constructor TTiledImage.Create(AOwner: TComponent); begin inherited Create(AOwner); AutoSize := False; FTiled := True; FBmp := TBitmap.Create; end; type TGCE = class(TGraphicControl); procedure TTiledImage.Paint; var wx, ix, wy, iy: Integer; begin if Tiled then begin if csDesigning in ComponentState then with TGCE(Self).Canvas do begin Pen.Style := psDash; Brush.Style := bsClear; Rectangle(0, 0, Width, Height); end; FBmp.Width := Width; FBmp.Height := Height; if Assigned(Picture) and Assigned(Picture.Graphic) then begin wx := Width div Picture.Graphic.Width; wy := Height div Picture.Graphic.Height; for ix := 0 to wx do for iy := 0 to wy do FBmp.Canvas.Draw(ix * Picture.Graphic.Width, iy * Picture.Graphic.Height, Picture.Graphic); // must use TGraphicControl Canvas property TGCE(Self).Canvas.StretchDraw(Rect(0, 0, Width, Height), Fbmp); end; end else inherited Paint; end; procedure TTiledImage.SetTiled(const Value: Boolean); begin if FTiled <> Value then begin FTiled := Value; Invalidate; end; end; procedure Register; begin RegisterComponents('3rdParty', [TTiledImage]); end; end. TImage zu verstehen ist sehr schwer. |
Re: EIn picture im image öfter vorkommen lassen
cool, schon mal im vorraus danke!
werde das mal durchlesen und versuchen einzubinden. ***EDIT*** Das ist aber auch ne ganz neue komponente, oder? ***EDIT*** So, hab die komponente installiert... GEIL! Das war genau das, was ich gesucht habe!! nochmals grossen dank :)) |
Re: EIn picture im image öfter vorkommen lassen
Zitat:
|
Re: EIn picture im image öfter vorkommen lassen
Zitat:
|
Re: EIn picture im image öfter vorkommen lassen
Canvas ist protected, also nicht direkt zugreifbar.
Man leitet also formal eine Klasse (TGCE) ab, die aber unveraendert ist. Das umtypen ist also ungefaehrlcih. die abgeleitete Klasse kann aber protected-Elemente zugreifen. |
Re: EIn picture im image öfter vorkommen lassen
ok danke für die erklärung
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 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