![]() |
Klassen in verschiedenen Units & Werte übergeben
Hallo,
ich habe ein Programm geschrieben welches sehr "groß" (unübersichtlich) geworden ist. Aus diesem Grund habe ich angefangen Klassen zu bilden und diese auch in bestimmte Units eingebunden um den Code zu strukturieren (kenne ich so aus C). In den einzelnen Units sind nun die Klassen deklariert. Ich möchte aber auch in anderen Klassen auf einzelne Werte zugreifen. Stehe noch ein bissel auf Kriegsfuss mit der OOP. |
Re: Klassen in verschiedenen Units & Werte übergeben
Mach mal bitte nen Beispiel, da meine Glaskugel heut Morgen ausm Fenster fiel... :zwinker:
|
Re: Klassen in verschiedenen Units & Werte übergeben
Hallo Osse,
meinst du das "Friend"-Prinzip das es in C++ gibt? Dieses gibt es AFAIK in Delphi nicht, du musst ueber die properties arbeiten. Hier mal ein Beispiel:
Delphi-Quellcode:
Wenn du mehrere Klassen in einer Unit deklariert hast, dann kannst du aus diesen Klassen AFAIR auch auf private-Member der anderen Klassen in der Unit zugreifen, allerdings hat das mit Kapselung schon gar nichts mehr zu tun. Ich hoffe das hilft dir irgendwie weiter :zwinker:
class TFooBar = class(TObject)
private FFoo: String; FBar: Integer; public property Foo: String read FFoo write FFoo; property Bar: Integer read FBar write FBar; end; Greetz alcaeus |
Re: Klassen in verschiedenen Units & Werte übergeben
Zitat:
Zitat:
@Osse Schaue mal auf Luckies homepage vorbei. Dort findest du ein "straight forward" Klassentutorial. Das sollte etwas Licht ins Dunkel bringen. Mit deiner Problembeschreibung kann ich nämlich so nicht viel anfangen. :gruebel: |
Re: Klassen in verschiedenen Units & Werte übergeben
Also, ich meine das ungefähr so:
Delphi-Quellcode:
Ich möchte einfach der Variablen RcvThread.hClient := CAN_Controller.Client zuweisen. Bekomme aber immer die Fehlermeldung, dass CAN_Controller.Client kein wert zugewiesen ist, obwohl er schon vorher einen Wert hat. Irgendwie hab ich die Klasse nich richtig eingebunden. Die CAN_Contoller Klasse ist in der Controller.pas Unit gespeichert.
unit main;
interface uses Nachrichten, Controller , NeueNachrichtErstellen, NeueSucheErstellen; type TRcvThread = class(TThread) private hClient: Byte; protected procedure Execute; override; public procedure Set_hClient(client : Byte); function Get_hClient() : Byte; end; public { Public declarations } TCANMsg := message CAN_Controller : TCAN_Controller; // Can Controller einstellungen und eingenschaften, FClientHandle: HCANClient; FNetHandle: HCANNet; FRcvEvent: TEvent; // Event von TRcv (Ankommende Telegramme) FRcvThread: TRcvThread; // Thread (Unterprozess) für Ankommende Telegramme property ClientHandle: HCANClient read FClientHandle; property RcvEvent: TEvent read FRcvEvent; end; var Form1: TForm1; CAN_Controller : TCAN_Controller; implementation .... procedure TRcvThread.Set_hClient(client : Byte); begin hclient := client; end; function TRcvThread.Get_hClient() : Byte; begin Get_hClient := hclient; end; procedure TRcvThread.Eingangsabgleich; var hilfe : byte; begin hilfe := CAN_Controller.Get_Client(); Set_hClient(hilfe); end;
Delphi-Quellcode:
1. eine Lösung für das Problem
unit Controller;
interface type //allgemeine Controlerbezeichnung TController = CLASS Client: Byte; // Typ 'Client-Handle' Byte Variable Netz : Byte; // Typ 'Net-Handle' Byte Variable Hardware : Byte; // Typ 'Hardware-Handle' Byte Variable CONSTRUCTOR Create ; END ; TCAN_Controller = CLASS(TController) procedure Initalisierung_CANController(Netz : Byte ; _Hardware : Byte ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var _Client : HCANClient); procedure Netzinfo(LB: TListBox ); procedure Hardwareinfo(LB: TListBox); procedure Hardware_analyse(var Hardware : HCANHw); procedure Status(LB : TListBox); public ... 2. Ist das eine gute Variante?? 3. Was kann ich besser machen?? Vielen dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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