AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Klassen in verschiedenen Units & Werte übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen in verschiedenen Units & Werte übergeben

Ein Thema von Osse · begonnen am 2. Mai 2005 · letzter Beitrag vom 2. Mai 2005
Antwort Antwort
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#1

Klassen in verschiedenen Units & Werte übergeben

  Alt 2. Mai 2005, 09:36
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.
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Klassen in verschiedenen Units & Werte übergeben

  Alt 2. Mai 2005, 09:42
Mach mal bitte nen Beispiel, da meine Glaskugel heut Morgen ausm Fenster fiel...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Klassen in verschiedenen Units & Werte übergeben

  Alt 2. Mai 2005, 09:55
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:
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;
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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Klassen in verschiedenen Units & Werte übergeben

  Alt 2. Mai 2005, 10:07
Zitat von alcaeus:
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.
Das gibt es wenn beide Klassen in der gleichen Unit deklariert sind.
Zitat von Osse:
Stehe noch ein bissel auf Kriegsfuss mit der OOP.
Da bezweifle ich einfach, dass er sich um friendly Klasses kümmern will.

@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.
  Mit Zitat antworten Zitat
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Klassen in verschiedenen Units & Werte übergeben

  Alt 2. Mai 2005, 14:26
Also, ich meine das ungefähr so:

Delphi-Quellcode:
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;
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.



Delphi-Quellcode:
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
...
1. eine Lösung für das Problem
2. Ist das eine gute Variante??
3. Was kann ich besser machen??

Vielen dank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
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