Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TEdit in Klasse ? (https://www.delphipraxis.net/45530-tedit-klasse.html)

richard_boderich 8. Mai 2005 04:01

Re: TEdit in Klasse ?
 
@Hansa


Habe versucht das mal in einer eigenen Klasse zusammenzufassen. Bekomme aber immer eine Schutzverletzung und
weiß nicht warum. :gruebel:



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;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    procedure FormClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TMapObject = class(Tform)
  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;

  public


    { Public-Deklarationen }
  end;



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

{$R *.dfm}



procedure TForm1.FormClick(Sender: TObject);
begin
mapobject1:=Tmapobject.create(form1);
mapobject1.show;
mapobject1.einheitenname.Caption:='test';
mapobject1.einheitenname.show;
end;

end.

Sharky 8. Mai 2005 06:37

Re: TEdit in Klasse ?
 
Hai Richard,

Du musst die Objekte in deiner Klasse erst "Createn". Schreibe Dir also einen eignen Delphi-Referenz durchsuchenconstructor in dem Du diese erzeugst und einen Delphi-Referenz durchsuchendestructor wo Du sie auch wieder freigibst.


P.S.: Warum nimmst Du in diesem Fall nich eine "normale" Form. Setzt deine Objekte darauf und erzeugst dir zur Laufzeit soviele davon wie Du brauchst?

Hansa 8. Mai 2005 13:50

Re: TEdit in Klasse ?
 
Erstens mal das mit der Form. Glaube nicht, daß das auf diese Art überhaupt gehen kann. Aus dem Source ist jetzt aber einigermaßen ersichtlich, was gemacht werden soll. Allerdings stört mich noch was : Das TEdit in dem Object. Glaube fast nicht, daß das automatisch mit erzeugt wird. Die Objekte sind nämlich ziemlich dumm. Allerdings frage ich mich gerade, warum du kein StringGrid verwendest ? Damit wäre das mit der Form und auch das TEdit erledigt. Jeder beliebigen Zelle kann man da ein TObject "anheften". Also ich würde es so machen : für jede Spalte einen eigenen TObject-Typ und basta. Herrje, da ist ja noch ein TImage. Dann gib dem Objekt der Image-Spalte am Besten nur den Dateinamen mit und behandele das Ganze dann mit
Delphi-Quellcode:
LoadFromFile (MeinImageObject.Filename)
im OnDrawCell. Ja, im Prinzip müßte das Ganze einwandfrei so gehen. Einfach wirds aber nicht gerade (erzeugen spaltenabhängiger TObjects, diese freigeben usw.). Alles andere wäre aber wohl noch komplizierter.

richard_boderich 8. Mai 2005 13:53

Re: TEdit in Klasse ?
 
Hallo Sharky!

Hab mir jetzt nen Constructor und Destructor erstellt.
Mein Project knippst aber die gesamte Deplhi Ide und den Debugger aus! :shock:
Langsam glaube ich es war doch keine so gute Idee das mit Klassen machen zu wollen
Ich dachte, das ich mir viel tipparbeit ersparen kann (der ganze record, array of record mist und das record speicherproblem), wenn ich das mit Klassen machen die nur meine benoetigten Eigenschaften und unterobjecte kapseln, aber das hier artet ja schon echt aus.
Ich bekomme ja nicht mal das Object erstellt :( .


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;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    procedure FormClick(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;

  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;


    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  mapobject1:tmapobject;
  implementation

{$R *.dfm}

constructor TMapObject.Create(Owner: TComponent);

begin
  Create(image);
  Create(edit);
  Create(Einheitenname);
end;

destructor TMapObject.destroy;
begin
  edit.free;
  image.free;
  einheitenname.free
end;



procedure TForm1.FormClick(Sender: TObject);
begin
mapobject1:=Tmapobject.create(self);
//mapobject1.show;
mapobject1.einheitenname.Caption:='test';
mapobject1.einheitenname.show;
end;

end.

Die Muhkuh 8. Mai 2005 14:12

Re: TEdit in Klasse ?
 
Zitat:

Zitat von richard_boderich
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;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    procedure FormClick(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;

  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;


    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  mapobject1:tmapobject;
  implementation

{$R *.dfm}

constructor TMapObject.Create(Owner: TComponent);

begin
  Image := TImage.Create(Owner); // So muss das heißen
  Edit := TEdit.Create(Owner);
  EnheitenName := TStaticText.Create(Owner);
end;

destructor TMapObject.destroy;
begin
  edit.free;
  image.free;
  einheitenname.free
end;



procedure TForm1.FormClick(Sender: TObject);
begin
mapobject1:=Tmapobject.create(self);
//mapobject1.show;
mapobject1.einheitenname.Caption:='test';
mapobject1.einheitenname.show;
end;

end.


richard_boderich 8. Mai 2005 14:41

Re: TEdit in Klasse ?
 
@ Spider,

willst du mir damit was sagen ?

Ich versuche jetzt nochmal zu erklaeren was ich will,vielleicht hab ich ja auch einen Denkfehler drin

Image: Timage
edit:Tedit;
Einheitenname: Tstatictext;
Mapx,Mapy:integer;


1. klick mit linker maus taste auf form
im onmousedown des forms
2. Tmapobject1.create;
2.1 zuweisen der Mauskoordinaten an Tmapobject (mapx,mapy);
3. wenn mapobject erstellt
4. zeige image an (mapx,mapY);
5. zeige edit an (mapx,mapy);
6. gib edit den focus
7. in onkeydown event von edit
7.1 if key=vk_return dann Einheitenname.caption:=edit.text
7.3 Positioniere Einheitenname (left,top);
7.2 Einheitenname.show;
8. fertig

Ich hoffe es ist ersichtlich wie ich mir das vorstelle

So long

Richard



//EDIT Sorry Spider hatte deinen Kommentar übersehen, jetzt stürtz es wenigstens nicht mehr ab. thx

Khabarakh 8. Mai 2005 15:25

Re: TEdit in Klasse ?
 
Würde es denn nicht reichen, ein Edit auf der Form für alle Objekte zu nehmen?

richard_boderich 8. Mai 2005 16:22

Re: TEdit in Klasse ?
 
@Khabarakh

das waere sicherlich moeglich. Hab aber ganz andere sorgen, das object wird jetzt erstellt,
aber ich kann das edit und den statictext nicht anzeigenlassen. wenn ich z.b einheitenname.show aufrufe
passiert garnichts.


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;

type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    procedure FormClick(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;

  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;


    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  mapobject1:tmapobject;
  implementation

{$R *.dfm}

constructor TMapObject.Create(Owner: TComponent);

begin
  Image := TImage.Create(Owner); // So muss das heißen
  Edit := TEdit.Create(Owner);
  Einheitenname := TStaticText.Create(Owner);
end;

destructor TMapObject.destroy;
begin
  edit.free;
  image.free;
  einheitenname.free
end;



procedure TForm1.FormClick(Sender: TObject);
begin
mapobject1:=Tmapobject.create(self);
//mapobject1.show;
mapobject1.einheitenname.Caption:='test';
mapobject1.einheitenname.show;
end;

end.

TStringlist 8. Mai 2005 17:05

Re: TEdit in Klasse ?
 
Hi, ich habe zwar nicht alle Einträge davor durchgelesen, aber ich würde sagen, im Constructor und Destructor fehlt noch jeweils ein "inherited"! Außerdem: TImage, TEdit und TStaticText brauchen nach ihrem Createn eine Zuweisung für ihre Parent-Property, ohne die sie sowieso nicht sichtbar werden können.

MfG

richard_boderich 8. Mai 2005 17:41

Re: TEdit in Klasse ?
 
Hallo TStringlist,

was meinst du mit Parent property in der delphi hilfe ist zwar ein haufen parentzeugs aber nix über parent property. Außerdem weis ich nicht was ich da für eine geerbte property angeben soll wenn Tmapobject das hoechste object in der hierarchie von Tmapobject ist. tmapobject ist von typ tcontrol. und dort gibt es eine
property visible, meinst du die ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.
Seite 2 von 5     12 34     Letzte »    

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