AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit in Klasse ?

Ein Thema von richard_boderich · begonnen am 7. Mai 2005 · letzter Beitrag vom 10. Mai 2005
Antwort Antwort
Seite 3 von 5     123 45      
TStringlist

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

Re: TEdit in Klasse ?

  Alt 8. Mai 2005, 18:58
Mit Parent-Property meinte ich eigentlich nur diese ganz normale Property namens "Parent" ...und die muss bei jedem sichtbaren Control (welches dynamisch erzeugt wird) extra geladen werden ...und zwar mit selbst wieder einem sichtbaren Control auf dem dann eben dieses erste Control darauf auftauchen soll. Also vorausgesetzt, dein "Owner", den du da in der Parameterliste deines Constructors mit angibst, ist ein solches sichtbares Control (vielleicht sogar die Form selbst), dann könntest du z.B. auch dieses dieser besagten Parent-Property jeweils zuweisen:

Image := TImage.Create(Owner);
Image.Parent := TWinControl(Owner);
usw...
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#22

Re: TEdit in Klasse ?

  Alt 8. Mai 2005, 23:50
Moin Jungs,

1. Also ich hab jetz eine objectlist eingefügt aber ich hab das problem das er nur das erste object
in die objectlist überträgt. hatt jemand ne ahnung wieso er das macht?

2. koennen objecte in einer objectlist den selben namen haben, sie haben doch unterschiedliche
handlesund einen index ,das muesste doch reichen oder? dann würde ich mir das dumme array of
tmapobject sparen. (ja ich weis bei mehr als 10 klicks gibst einen bereichsüberschreitung weil das array
statisch ist, habe es nur zu testzwecken auf die schnelle integriert)

3. wie kann ich auf das onkeydown ereignis des edits meines selbsterstellten objects zugreiffen,
muss ich da irgendwelche proceduren im create deklarieren.






Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    Label1: TLabel;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(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

  published
    property Einheitentyp :String read Typ write Typ;
    property MapX :Integer read x write x;
    property MapY :Integer read y write y;
  // procedure zeichnen(Mapx,Mapy:integer);
  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; 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
  Image := TImage.Create(Owner); // So muss das heißen
  image.Parent := TWinControl(owner);
  image.Picture.loadfromfile('marker_fadenkreuz.gif');
  image.transparent:=true;
  Edit := TEdit.Create(Owner);
  Edit.Parent := TWinControl(owner);
  edit.Left:=mapx+50;
  edit.Top:=mapy+25;
  edit.setfocus;
  Einheitenname := TStaticText.Create(owner);
  Einheitenname.Parent := TWinControl(owner);
end;

destructor TMapObject.destroy;
begin
  edit.free;
  image.free;
  einheitenname.free
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 := TObjectList.Create; //tobjectlist zuweisen
Liste.Add(mapobject[i]);
label1.caption:=inttostr(Liste.count); //tur kontrolle
inc(i);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
end;

end.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#23

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 00:17
Wie siehts mit meinem Vorschlag (Stringgrid) denn aus ? Überhaupt gesehen ? Letzte Beiträge auf Seite werden oft übersehen. 8) Die meisten Fragen wären wohl überflüssig. Der Code ist IMHO jetzt schon viel zu gewaltig und unübersichtlich für den gewünschten Zweck.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#24

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 00:38
Moin Hansa,

Also ich habe deinen Beitrag nicht übersehen. ich kann nur nichts mit deinem Vorschlag anfangen. Ich
verstehe nicht wie mir ein Stringgrid bei meinem Problem helfen kann, bzw. ich denke einfach anders als du.

Ich wollte weiter nicht als ein object , das folgende bedingungen und funktionen kapselt:


1. enthaelt 1 Timage
2. enthaelt 2 Tedit
3. enthaelt 1 TStatictext
4. deklariert Variable Mapx,Mapy ->Integer;
5. deklariert Variable Einheitentyp ->String;


4. object ist zur laufzeit verschiebbar
object soll selbst image.left und image.top berechnen aus mapx und mapy (das object soll das selber tun)
5. object soll loeschbar sein

Ich bin kanpp davor aufzugeben. es kostet einfach zu viel zeit und nerven, zu viel neues der ganze Klassenkram , aber ich habs wenigstens versucht

Hau rein,

Richard

//EDIT das war mein code ohne die object implementierung

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Panel2: TPanel;
    CoolBar1: TCoolBar;
    ComboBox1: TComboBox;
    BitBtn1: TBitBtn;
    StaticText1: TStaticText;
    XPManifest1: TXPManifest;
    Image2: TImage;
    StaticText2: TStaticText;
    Edit1: TEdit;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);


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

var
  Form1: TForm1;
  dra,helper:boolean;
  terrorspeicherx,terrorspeichery,xx,yy,terrorx,terrory:Integer;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Dra=false then statictext1.Caption:='Map X: = '+inttostr(xx)+' '+'Map Y: = '+inttostr(yy);
if (mouse.cursorpos.x > form1.Left) and (mouse.cursorpos.x < form1.Left+form1.width) and
   (mouse.CursorPos.y>form1.Top) and (mouse.CursorPos.y < form1.top+form1.height) And (helper=true) then
   begin
   image1.left:=-terrorx+mouse.cursorpos.x-form1.left;
   image1.top:=-terrory+mouse.cursorpos.y-form1.top;
 // image2.left:=image1.Left+terrorx;
 // image2.top:=image1.Top+terrory;

   end
   else
   begin
    //exit;
   end;


if helper=false then
begin

if (mouse.cursorpos.x<form1.Left) and (image1.left<=30) then image1.left:=image1.left+15;
if (mouse.cursorpos.x>form1.Left+form1.width) and (image1.Left+image1.width>=form1.width-30) then image1.left:=image1.left-15;
if (mouse.cursorpos.y<form1.top) and (image1.top<=30) then image1.top:=image1.top+15;
if (mouse.cursorpos.y>form1.top+form1.height) and (image1.top+image1.height>=form1.height-59)then image1.top:=image1.top-15;
end;

   image2.left:=image1.left+terrorspeicherx;
   image2.top:= image1.top+terrorspeichery; //with map move funktion
   statictext2.Left:= image1.left+terrorspeicherx+50;
   statictext2.top:= image1.top+terrorspeichery+18;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered:=true;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssright in shift then
  begin
  terrorx:=+x+4;
  terrory:=+y+30;
  helper:=true;
  dra:=true;
  end;

  if ssleft in shift then
  begin
  terrorspeicherx:=xx-5-image2.width div 2;
  terrorspeichery:=yy-image2.height-5;
   image2.left:=image1.left+terrorspeicherx;
   image2.top:=image1.top+terrorspeichery;
   edit1.Left:=image1.left+terrorspeicherx+50;
   edit1.Top:=image1.top+terrorspeichery+18;
   edit1.Visible:=true;
   edit1.setfocus;
  end;

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
helper:=false;
dra:=false;
end;


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
xx:=x+4;
yy:=y+30;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=VK_RETURN then
begin
edit1.hide;
statictext2.Left:= image1.left+terrorspeicherx+50;
statictext2.top:= image1.top+terrorspeichery+18;
statictext2.caption:=' '+edit1.Text+' ';
statictext2.show;
end;
end;

end.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
TStringlist

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

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 08:36
Moin

1.) fehlt in deinem Constructor immer noch das "inherited" am Anfang.

2.) sollten die Unterkomponenten für ihren eigenen Owner einfacherweise nur das "Self" mitbekommen. Der extra Destructor wird dann unnötig und kann rausfliegen, weil die Unterkomponenten dann nämlich automatisch mit der Komponente selbst destroyed werden (also dann, wenn die ja ihrerseits durch ihren eigenen Owner destroyed wird).

3.) musst du TObjectList in "FormCreate" createn (und dann wieder in "FormDestroy" free'n), sonst erzeugst du ja bei jedem MouseDown immer wieder eine neue ObjectListe ...und welche demzufolge dann natürlich auch jedesmal nur einen einzigen Eintrag groß werden kann.

Dann müsste es eigentlich gehn...


Sonst noch zu deiner obigen Frage2: Objekte in einer Objectlist haben keine Namen. Das dortige "items" (das in anderen Komponenten sonst oft eine TStringList ist) ist hier quasi nur eine Array of TObject, also ohnehin nur sowas wie eine Array of Pointer.

Zu deiner obigen Frage3: Du könntest z.B. im Rahmen deiner Komponente darin eine weitere Routine schreiben, also z.B.:

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

und im Constructor dann folgendes eintragen:

Edit.OnMouseDown := EditMouseDown;


PS. Wenn du möchtest, dass das Objekt seine Koordinaten selbst berechnet, dann solltest du diesem die aktuelle Maus-Position zum Zeitpunkt seiner Erstellung am Besten auch gleich über dessen Constructor-Parameterliste mitteilen.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#26

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 11:36
Hallo TStringlist!

Erstmal hab vielen Dank für die vielen Hinweise und das du mich so unterstützt.
Ich weis es sehr zu schätzten das du die Zeit opfers und dich jedesmal durch meinen Quelltext wühlst.

Das mit der Liste stimmt, hab ich gestern selber noch rausgefunden, aber es ist gut das du mich
daraufhin weist das ich sie im Form.Destroy wieder freigeben muss. *uups* Ich habe das Project jetzt
mal so überarbeitet wie ich es mir vostelle. Habe auch Formatierung und Großschreibung hinzugefügt
(der Übersichtlichkeit wegen ) Leider bekomme ich die Übergabe meiner Constructor Parameter nicht
hin.

In der OH steht:

Zitat:
Die Deklaration gleicht einer normalen Prozedurdeklaration, beginnt aber mit dem Wort constructor.
Auch unter "Aufrufkonventionen von Constructoren" schweigt sich die OH aus , wie ich dort Parameter übergebe

Ansonsten hab ich alles brav so gemacht wie du es mir empfohlen hast.

Bis denne,

Richard

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    Label1: TLabel;
    Label2: TLabel;
    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
  published
    property Einheitentyp :String read Typ write Typ;
    property MapX :Integer read x write x;
    property MapY :Integer read y write y;
  // procedure zeichnen(Mapx,Mapy:integer);
  public
    constructor Create(Owner: TComponent; MapX: Integer; MapY: Integer); override;
       { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mapobject:tmapobject;
  i,index:integer;
  Liste:TObjectList;
  implementation

{$R *.dfm}

constructor TMapObject.Create(Owner: TComponent; MapX: Integer; MapY: Integer);
begin
  inherited;
    Image := TImage.Create(self); // So muss das heißen
    Image.Parent := TWinControl(owner);
    Image.Picture.loadfromfile('marker_fadenkreuz.gif');
    Image.Transparent:=true;
    Image.Left:=mapx;
    Image.Top:=mapy;
      Edit := TEdit.Create(self);
      Edit.Parent := TWinControl(owner);
      Edit.Left:=MapX+50; // Positionberechnung
      Edit.Top:=mapy+25; //
      Edit.SetFocus;
    Einheitenname := TStaticText.Create(self);
    Einheitenname.Parent := TWinControl(owner);
end;


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MapObject:=TMapObject.Create(self,X,Y); //object erstellen
  Liste.add(MapObject);
  Label1.caption:=inttostr(Liste.count);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Liste := TObjectList.create;
end;


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

end.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#27

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 12:26
Hallo,
versuch es mal so
Delphi-Quellcode:
constructor Create(Owner: TComponent; MapX: Integer; MapY: Integer); reintroduce; virtual;

constructor TMapObject.Create(Owner: TComponent; MapX, MapY: Integer);
begin
  inherited Create(Owner);
  ...
end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#28

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 12:36
Danke Jens, jetz funzt es wunderbar und es kommen auch keine Compiler Fehlermeldungen mehr.

So long,

der Richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
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
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#30

Re: TEdit in Klasse ?

  Alt 9. Mai 2005, 13:30
So Jungs,


@TStringlist, oh man jetz verwirst du mich wieder. Wozu den eine setprocedure, ich kann auf Mapx, MapY doch schon schreibend zugreifen, so habe ich sie doch in der Klasse deklariert? oder ist das nicht so?


habe jetz die Komponente etwas umgestaltet, Einheitenabhängikeit im Constructor hinzugefügt, und
ein Timage auf dem Form eingefügt, das die Karte als Jpeg beinhaltet. Dies Sache mit den Einheiten
funktioniert gut, aber ich bekomme ja die Mauscoordinaten jetz nicht mehr im Form.onmousedown sondern
im Timage1.onmousedown. Das klappt auch, nur zeichnet er mein object relativ zum Form1.left / Form1.top und
nicht zu Image1.Left / image1.top. muss ich da den owner veraendern?

PS: das Image ist größer als das Form, und das soll auch so bleiben

So long,

Richard

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    Label1: TLabel;
    Label2: TLabel;
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);

  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
  published
    property Einheitentyp :String read Typ write Typ;
    property MapX :Integer read x write x;
    property MapY :Integer read y write y;
  // procedure zeichnen(Mapx,Mapy:integer);
  public
    constructor Create(Owner: TComponent; MapX: Integer; MapY: Integer; Einheitentyp: String); reintroduce; virtual;
       { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mapobject:tmapobject;
  i,index:integer;
  Liste:TObjectList;
  implementation

{$R *.dfm}

constructor TMapObject.Create(Owner: TComponent; MapX: Integer; MapY: Integer; Einheitentyp:String);
begin
  //inherited;
    Image := TImage.Create(self); // So muss das heißen
    Image.Parent := TWinControl(owner);
    if Einheitentyp = 'Panzerthen Image.Picture.loadfromfile('marker_fadenkreuz.gif');
    if Einheitentyp = 'testthen Image.Picture.loadfromfile('unbenannt-3.gif');
    Image.Transparent:=true;
    Image.Left:=mapx;
    Image.Top:=mapy;
      Edit := TEdit.Create(self);
      Edit.Parent := TWinControl(owner);
      Edit.Left:=MapX+50; // Positionberechnung
      Edit.Top:=mapy+25; //
      Edit.SetFocus;
    Einheitenname := TStaticText.Create(self);
    Einheitenname.Parent := TWinControl(owner);
end;


procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MapObject:=TMapObject.Create(self,X,Y,'test'); //object erstellen
  Liste.add(MapObject);
  Label1.caption:=inttostr(Liste.count);
  Label2.Caption:=inttostr(x)+' , '+inttostr(y);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Liste := TObjectList.create;
end;


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



end.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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