Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EIn picture im image öfter vorkommen lassen (https://www.delphipraxis.net/38688-ein-picture-im-image-oefter-vorkommen-lassen.html)

Master_RC 22. Jan 2005 22:18


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?

Dani 22. Jan 2005 22:57

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;

Master_RC 23. Jan 2005 14:05

Re: EIn picture im image öfter vorkommen lassen
 
kewl, THX!

PS:
es klappt sogar ^^

DGS 25. Jul 2005 01:07

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 )

Robert Marquardt 25. Jul 2005 04:55

Re: EIn picture im image öfter vorkommen lassen
 
Da gibt es einen Trick.
Delphi-Quellcode:
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.
Das habe ich naemlich mal bei Experts-Exchange gefragt.
TImage zu verstehen ist sehr schwer.

DGS 25. Jul 2005 19:16

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 :))

Khabarakh 25. Jul 2005 19:27

Re: EIn picture im image öfter vorkommen lassen
 
Zitat:

Zitat von DGS
geht sowas nur mit der tbitmap?

wenn ja, wie kann man an tbitmap ein tpicture übergeben?

( will da kein BMP reinladen )

Was meinst du mit "übergeben"? Den Inhalt des Pictures (also TPicture.Graphic) kannst du einfach über Canvas.Draw in das Bitmap kopieren.

BlackJack 26. Jul 2005 11:04

Re: EIn picture im image öfter vorkommen lassen
 
Zitat:

Zitat von Robert Marquardt
Das habe ich naemlich mal bei Experts-Exchange gefragt.
TImage zu verstehen ist sehr schwer.

wozu sind denn die typecasts mit TGCE gut?

Robert Marquardt 26. Jul 2005 11:16

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.

BlackJack 26. Jul 2005 12:25

Re: EIn picture im image öfter vorkommen lassen
 
ok danke für die erklärung


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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