Autor Beitrag
$ebbi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Mo 29.11.10 16:34 
Hi,

ich möchte in Delphi eine Klasse THaus erstellen, das Haus (bzw. der einfachheit halber erstmal ein Viereck) soll einfach an eine bestimmte Stelle auf ein Image gezeichnet werden. An für sich kein Ding aber wie soll ich das mit Hilfe einer Klasse erreichen, ich bekomms einfach nicht hin. Irgendwie mit constructor, etc. aber ich weiß einfach nicht wie?

könnt ihr mir vllt zeigen, was ich dazu bei type und dem constructor/destructor teil schreiben muss, das beim klick auf button 1 ein Viereck/Haus gezeichnet wird?

wär echt klasse

mfg Sebbi


Moderiert von user profile iconMartok: Topic aus Sonstiges (Delphi) verschoben am Mo 29.11.2010 um 15:41
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.11.10 16:45 
Du kannst z.B. eine Methode PaintTo in THaus erstellen, der du das Canvas (z.B. ImageX.Canvas) übergibst, auf den das Haus gezeichnet werden soll. Ggf. noch mit der gewünschten Position.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 29.11.10 16:51 
ein Beispiel:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;





type
  THaus=Class(TObject)
    Private
    FWidth, FHeight:Integer;
    FColor:TColor;
    FOrigin:TPoint;
    Public
    Constructor Create;
    Property Color:TColor read FColor Write FColor;
    Property Height:Integer read FHeight Write FHeight;
    Property Width:Integer read FWidth Write FWidth;
    Property Origin:TPoint read FOrigin write FOrigin;
    Procedure Paint(Canvas:TCanvas);
  End;


  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ THaus }

constructor THaus.Create;
begin
   Width := 100;
   Height := 100;
   Color := clBlue;
end;

procedure THaus.Paint(Canvas:TCanvas);
begin
    Canvas.Pen.Color := FColor;
    Canvas.Rectangle(  FOrigin.X
                     , FOrigin.Y +  (Height div 2)  // Platz für das Dach lassen
                     , FOrigin.X + Width
                     , FOrigin.Y +  (Height div 2) + Height
                     );
   Canvas.MoveTo(FOrigin.X, FOrigin.Y +  (Height div 2));
   Canvas.LineTo( FOrigin.X + (Width div 2), FOrigin.Y);
   Canvas.LineTo( FOrigin.X + Width, FOrigin.Y +  (Height div 2));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  p:TPoint;
begin
  With THaus.Create do
    begin
      Paint(image1.Canvas);
      p.X := 100;
      p.Y := 120;
      Origin:=p;
      Color := clRed;
      Width := 50;
      Paint(image1.Canvas);
      Free;

    end;
end;

end.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: $ebbi
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Mo 29.11.10 17:11 
vielen dank genau das hab ich gesucht

edit: inwiefern müsst ich das jetzt abändern das sich das ganze haus bewegt (ist für später wichtig ;) ) bei mir zieht sich das nur in die länge und übermalen mit timer klappt auch nicht
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.11.10 17:59 
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
bei mir zieht sich das nur in die länge und übermalen mit timer klappt auch nicht
Du kannst an der alten Stelle den Hintergrund aus deinem Hintergrundbild wiederherstellen und dann das Haus an der neuen Stelle drüberzeichnen.

Für diesen Beitrag haben gedankt: $ebbi
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Mo 29.11.10 19:18 
jap perfekt klappt alles ihr habt mir echt super geholfen
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.11.10 21:36 
Geholfen ist gut. Dir wurde das ganze Programm geschrieben. Aber eventuell noch mal zum Nachlesen, damit du auch verstehst, was da passiert, hab eich hier ein Tutorial zum Thema Klassen in Delphi: www.michael-puff.de/...i/Tutorials/Klassen/