Delphi-PRAXiS
Seite 3 von 3     123   

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 Laufzeitfehler mit eigenem Typ (https://www.delphipraxis.net/133660-laufzeitfehler-mit-eigenem-typ.html)

64Jabor 6. Mai 2009 18:23

Re: Laufzeitfehler mit eigenem Typ
 
:D
Hmm also ich denke ich poste den "gesamten" Code nochmal, eventuell ist im Zusammenhang alles etwas klarer...

Delphi-Quellcode:
constructor TLCComputer.Create(NName, NIP: string; Column, Row: integer; NOwner: TWinControl);
begin
 inherited Create(NOwner);
 Parent := NOwner;

 Width := cComputerWidth;
 Height := cComputerHeight;

 Name := TLabel.Create(self);
 Name.Parent := self;
 Name.Caption := NName;
 Name.Left := Column * (cComputerWidth + cComputerSpaceV);
 Name.Top := Row   * (cComputerHeight + cComputerSpaceH);

 IP  := TLabel.Create(self);
 IP.Parent := self;
 IP.Caption := NIP;
 IP.Left  := Column * (cComputerWidth + cComputerSpaceV);
 IP.Top := Row   * (cComputerHeight + cComputerSpaceH) + 10;
end;
Und die Erstellung der Klasseninstanz:
Delphi-Quellcode:
procedure TFrmLC.BtnAddComputerClick(Sender: TObject);
var
 Name, IP: string;
 Column, Row: integer;
begin
 Name := InputBox('Computername', 'Bitte geben Sie einen Computernamen an:', '');
 IP  := InputBox('IP-Adresse', 'Bitte geben Sie die IP-Adresse des Computers an:', '');

 SetLength(Computers, Length(Computers) + 1);
 Computers[Length(Computers)-1] := TLCComputer.Create(Name, IP, Column, Row, self);
end;
Keine Laufzeitfehler, keine Compilerfehler, läuft einwandfrei nur passieren tut nix ^^

//edit: mir ist bewusst dass durch fehlende Angabe von Column und Row die Left und Top-Werte der label 0 werden, aber das ist ja nicht schlimm

DeddyH 6. Mai 2009 18:31

Re: Laufzeitfehler mit eigenem Typ
 
Und beim Durchsteppen wird auch alles durchlaufen? Hast Du den Konstruktor auch überschrieben?

jfheins 6. Mai 2009 18:35

Re: Laufzeitfehler mit eigenem Typ
 
Ich vermute einfach mal, die Labels sind unsichtbar, weil sie nicht mehr im Ciontrol sind ;)

Du erstellst du Labels und setzt das Parent auf "Self" - das sit gut so, aber die Left und die Top-Eigenschaft des Labels sind nun relativ zur oberen linken Ecke des Parents (= Des neuen Controls)

Proibier mal das so:
Delphi-Quellcode:
constructor TLCComputer.Create(NName, NIP: string; NOwner: TWinControl);
// Column und Row sollten nur in dem Formular eine Rolle spielen
begin
inherited Create(NOwner);
Parent := NOwner;

Width := cComputerWidth; // Sind das globale Variablen?
Height := cComputerHeight;

Name := TLabel.Create(self);
Name.Parent := self;
Name.Caption := NName;
Name.Left := 5;
Name.Top := 5;

IP  := TLabel.Create(self);
IP.Parent := self;
IP.Caption := NIP;
IP.Left  := 5;
IP.Top := 20;
end;
;)

64Jabor 6. Mai 2009 18:38

Re: Laufzeitfehler mit eigenem Typ
 
Ja auch in Einzelschritten wird alles brav durchlaufen.
Den Konstructor überschrieben?

Delphi-Quellcode:
type
 TLCComputer = class(TWinControl)
  private
   Name, IP: TLabel;
   Column, Row: integer;

  public
   constructor Create(NName, NIP: string; Column, Row: integer; NOwner: TWinControl);
 end;
Den Rest kennst du ja...

//edit:
Wenn ich Left und Top explizit angebe, erscheinen die Labels!

Mit Colum und Row wollte ich die Klasseninstanzen später ansprechen, aber das kann ich ja jetzt auch per OnClick auf das TWinControl, nicht?

DeddyH 6. Mai 2009 18:39

Re: Laufzeitfehler mit eigenem Typ
 
Also liegt es an den Koordinaten. Und mit Überschreiben meinte ich das Wörtchen override.

64Jabor 6. Mai 2009 18:43

Re: Laufzeitfehler mit eigenem Typ
 
Nunja es klappt auch ohne...Soll ich trotzdem verwenden?

DeddyH 6. Mai 2009 18:45

Re: Laufzeitfehler mit eigenem Typ
 
Ich würde es tun.

64Jabor 6. Mai 2009 18:49

Re: Laufzeitfehler mit eigenem Typ
 
Okay, aber es funktioniert jetzt alles wunderbar, ich übergebe die Left und Top-Werte der Computerinstanz und positioniere relativ dazu die beiden Labels, und sie werden angezeigt!

Vielen Dank euch allen! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 3 von 3     123   

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