Thema: Delphi TEdit in Klasse ?

Einzelnen Beitrag anzeigen

Benutzerbild von richard_boderich
richard_boderich

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

Re: TEdit in Klasse ?

  Alt 10. Mai 2005, 13:19
Hallo allerseits!

Also ich hab das ganze etwas erweitert. Ein neues Mapobject kann jetzt nur erstellt werden , wenn für das aktuelle ein
Name vergeben wird. Habe dblclick Procedure eingefügt, damit ein spaeteres umbenennen moeglich ist. Doppelklick auf
das einheitenimage oder das einheitenlabel bewirkt dies.

@ Tstringlist, das mit der Setprocedure ist mir jetz klar, den meine berechnung steht zwar im construktor drin, wird
aber dann auch nur verwendet bei erstellen des Objects und nicht bei anderen aktionen mit dem bestehenden onject? Habe ich das
richtig verstanden?

Habe schon wieder ein neues Problem. Nehmen wir an ich habe 3 MapObjecte erstellt, moechte aber beim anklicken des einheiten images von einem der 3 eine weitere verarbeitung nur dieses 1 objectes ermoeglichen. Habe mit Findcomponent experimentiert
aber nur exeptions gekriegt. hatt den das object keinen eindeutigen bezeichner anhand dessen man es waerend der laufzeit
und auch spaeter in der TObjectlist identifizieren kann? (Listindex muss ermittelt werden);

waere toll wenn jemand einen hinweis hat. Mein aktueller Code ist im anhang


PS: Nochmals vielen Dank an Stringlist, Jens und Hansa für die viele Nachsicht und Gedult mit mir.


Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Panel2: TPanel;
    CoolBar1: TCoolBar;
    ComboBox1: TComboBox;
    BitBtn1: TBitBtn;
    StaticText1: TStaticText;
    Panel1: TPanel;
    JvRollout1: TJvRollout;
    Image2: TImage;
    CoolBar2: TCoolBar;
    Panel3: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Bevel1: TBevel;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Panel4: TPanel;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button11: TButton;
    Panel5: TPanel;
    Button18: TButton;
    Button19: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button23: TButton;
    Button24: TButton;
    Button25: TButton;
    Image3: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; 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

    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DblClick(Sender: TObject); reintroduce; virtual;

  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.Left:=mapx;
    Image.Top:=mapy;
    image.autosize:=true;
    Image.Transparent:=true;
    if Einheitentyp = 'Panzerthen Image.Picture:=Form1.image3.picture;
    if Einheitentyp = 'testthen Image.Picture.loadfromfile('unbenannt-3.gif');
    Image.Parent := TWinControl(owner);

      Edit := TEdit.Create(self);
      Edit.Left:=MapX+50; // Positionberechnung
      Edit.Top:=mapy+25; //
      Edit.Parent := TWinControl(owner);
      Edit.SetFocus;

    Einheitenname := TStaticText.Create(self);
    Einheitenname.Left:=mapx+50;
    Einheitenname.Top:=mapy+25;
    Einheitenname.Height:= 20;
    Einheitenname.BevelInner:= bvLowered;
    Einheitenname.BevelKind:= bkSoft;
    Einheitenname.BevelOuter:= bvRaised;
    Einheitenname.Font.Charset:= DEFAULT_CHARSET;
    Einheitenname.Font.Color:= clWindowText;
    Einheitenname.Font.Height:= -13;
    Einheitenname.Font.Name:= 'MS Sans Serif';
    Einheitenname.Font.Style:= [fsBold];
    Einheitenname.ParentFont:= False;
    Einheitenname.TabOrder:= 1;
    Einheitenname.Transparent:= False;
    Einheitenname.Visible:= False;
    Einheitenname.Parent := TWinControl(owner);

    Edit.OnKeyDown := EditKeyDown;
    Image.OnDblClick:=Dblclick;
    Einheitenname.OnDblClick:=DblClick;
end;


procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

Const NamePrefix='Mapobject';

begin
  if ssleft in shift then
  begin
    TMapObject.Create(self,X,Y,'Panzer').Name := NamePrefix+inttostr(i); //object erstellen
    Liste.add(MapObject);
    Label1.caption:=inttostr(Liste.count);
    Label2.Caption:=inttostr(x)+' , '+inttostr(y);
    Form1.Image1.OnMouseDown:=nil;
  end;
end;


procedure tmapobject.DblClick(Sender: TObject);
begin
Form1.Image1.OnMouseDown:=nil;
Einheitenname.Hide;
Edit.show;
Edit.SetFocus;
end;


procedure TMapObject.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=VK_Return) And (edit.text<>'') then
  begin
  Einheitenname.caption:=' '+edit.text+' ';
  Edit.Hide;
  Einheitenname.Show;
  Form1.Image1.OnMouseDown:=form1.image1MouseDown;
  end;

  if (Key=VK_Return) And (edit.text='') then
  begin
    form1.Label1.caption:='Fehler Sie muessen einen Namen Vergeben!';
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  form1.DoubleBuffered:=true;
  Statictext1.doublebuffered:=true;
  Liste := TObjectList.create;
end;


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


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
form1.StaticText1.caption:='Map X = '+inttostr(x)+' Map Y = '+inttostr(y);
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