![]() |
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:
Und die Erstellung der Klasseninstanz:
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;
Delphi-Quellcode:
Keine Laufzeitfehler, keine Compilerfehler, läuft einwandfrei nur passieren tut nix ^^
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; //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 |
Re: Laufzeitfehler mit eigenem Typ
Und beim Durchsteppen wird auch alles durchlaufen? Hast Du den Konstruktor auch überschrieben?
|
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; |
Re: Laufzeitfehler mit eigenem Typ
Ja auch in Einzelschritten wird alles brav durchlaufen.
Den Konstructor überschrieben?
Delphi-Quellcode:
Den Rest kennst du ja...
type
TLCComputer = class(TWinControl) private Name, IP: TLabel; Column, Row: integer; public constructor Create(NName, NIP: string; Column, Row: integer; NOwner: TWinControl); end; //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? |
Re: Laufzeitfehler mit eigenem Typ
Also liegt es an den Koordinaten. Und mit Überschreiben meinte ich das Wörtchen override.
|
Re: Laufzeitfehler mit eigenem Typ
Nunja es klappt auch ohne...Soll ich trotzdem verwenden?
|
Re: Laufzeitfehler mit eigenem Typ
Ich würde es tun.
|
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 23:31 Uhr. |
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