Thema: Delphi TEdit in Klasse ?

Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#29

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 13:16
Zitat von richard_boderich:
Leider bekomme ich die Übergabe meiner Constructor Parameter nicht
hin.
Echt Käse *g*, da hast du dir auch schon genau den Punkt rausgesucht, wo ich vorhin etwas geschlampt habe, und den ich jetzt eigentlich gerade per "Edit" im Post schnell noch ändern wollte *ggg*. Das im Constructor zu machen, ist nämlich bei deinen Anforderungen eher etwas unsinnig, denn (wie du ja oben schon kurz erwähnt hast) das Object soll ja zur Laufzeit verschiebbar sein, und zwar dann wahrscheinlich auch immer mal wieder, je nach dann auch immer wieder neu übergebenen MapX- u. MapY-Werten. Und da du MapX- u. MapY klugerweise dann auch gleich schon als Property formuliert hast, ist es daher also das logischste, hier einfach nur noch mehr eine zu diesen Properties jeweils dazu mögliche Set-Procedure mitzudefinieren. Dort kannst du dann also auch alle event. Left- u. Top-Werte gleich immer wieder neu mitberechnen.

Sofern du dich da noch nicht richtig eingearbeitet haben solltest, sähe das Ganze dann also ungefähr so aus:


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, XPMan, StdCtrls, ComCtrls, Menus, ToolWin,
  Buttons, ImgList, Contnrs;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    XPManifest1: TXPManifest;
    Edit1: TEdit;


    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);


  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

  TMapObject = class(TControl)
  private
    image: TImage; // Für das entsprechende Einheitenbild besser vielleicht Imagelist, kann imagelist nur bmp ich brauch aber gif?
    Edit: TEdit; // Eingabefeld für Einheitenname
    Einheitenname: TStaticText; // Anzeige des Einheitennamens
    X,Y: Integer; // Position der Einheit auf Karte Y
    Typ: String; // z.B. "Infantry", Image ist abhaengig vom Einheitentyp wo kann ich diese Abhaengigkeit berechnen oder festlegen z.B wenn Einheitentyp = 2 dann image.picture.'Panzer.bmp"
                                   //draggen ermoeglichen und draggingstatus

    procedure SetX(Value : integer);
    procedure SetY(Value : integer);
    procedure EditMouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
  published
    property Einheitentyp :String read Typ write Typ;
    property MapX :Integer read X write SetX;
    property MapY :Integer read Y write SetY;

  public
    constructor Create(Owner: TComponent); override;
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  mapobject: array [1..10] of tmapobject;
  i,index:integer;
  Liste:TObjectList;
  implementation

{$R *.dfm} 


constructor TMapObject.Create(Owner: TComponent);
begin
  inherited;
  Image := TImage.Create(self); // So muss das heißen
  image.Parent := TWinControl(owner);
  image.Picture.loadfromfile('geld.bmp');
  image.transparent:=true;
  Edit := TEdit.Create(self);
  Edit.Parent := TWinControl(owner);
  edit.Left:=mapx+50;
  edit.Top:=mapy+25;
  edit.setfocus;
  Einheitenname := TStaticText.Create(self);
  Einheitenname.Parent := TWinControl(owner);
  Edit.OnMouseDown := EditMouseDown;
end;


procedure TMapObject.SetX(Value : integer);
begin
  Image.Left := Value;
  Edit.Left := Value;
end;

procedure TMapObject.SetY(Value : integer);
begin
  Image.Top := Value;
  Edit.Top := Value;
end;

procedure TMapObject.EditMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  beep;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mapobject[i]:=Tmapobject.Create(self); //object erstellen (lächerlich nur um
                                                   //einen eindeutigen onjectnamen zu bekommen ?!
mapobject[i].mapx:=x;
mapobject[i].mapy:=y;

Liste.Add(mapobject[i]);
label1.caption:=inttostr(Liste.count); //tur kontrolle
inc(i);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Liste := TObjectList.Create; //tobjectlist zuweisen
  i:=1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Liste.free;
end;

end.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat