Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf Objekte von Unterklasse aus Zugreifen (https://www.delphipraxis.net/31699-auf-objekte-von-unterklasse-aus-zugreifen.html)

n3cRo 12. Okt 2004 19:46


Auf Objekte von Unterklasse aus Zugreifen
 
Hi,
hab ne Unit fmChatClient (Hauptformular) die nen Formular hat mit nem MemoFeld namens mProtokoll. In der Unit lade ich ne Klasse ChatClient.

Delphi-Quellcode:
unit fmChatClient;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, mChatClient;

type
  TfChatClient = class(TForm)
    eServerIP: TEdit;
    eZuSendenderText: TEdit;
    bSenden: TButton;
    bVerbinden: TButton;
    bTrennen: TButton;  
    bBeenden: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    mProtokoll: TMemo;
    procedure bVerbindenClick(Sender: TObject);
    procedure bTrennenClick(Sender: TObject);
    procedure bSendenClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bBeendenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    zServerIP: string;
    zVerbunden: boolean;
  public
    { Public-Deklarationen }
  end;

var
  fChatClient: TfChatClient;
  hatVerbindung: chatClient;


Diese hat die Variable kenntChatFormular. Die das obrige Formular repräsentieren soll. Über die möchte ich jetz auf das Memofeld zugreifen.


Delphi-Quellcode:
unit mChatClient;

interface

uses mCLientverbindung, Forms;

type
  ChatClient= class(ClientVerbindung)
  private
    kenntChatFormular:TForm;
  public
    constructor init(pIPAdresse:string; pPortNR:integer; pMitProtokoll: boolean; pFormular:TForm);
    procedure bearbeiteNachricht(pNachricht:string);override;
  end;

implementation

uses fmChatClient;

constructor ChatClient.init(pIPAdresse:string; pPortNR:integer; pMitProtokoll: boolean; pFormular:TForm);
begin
  inherited init(pIPAdresse, pPortNR, pMitProtokoll);
  kenntChatFormular := fChatClient;
end;

procedure ChatClient.bearbeiteNachricht(pNachricht:string);
begin
     //ShowMessage('hab was: ' + pNachricht);
     //kenntChatFormular.mProtokoll.Lines.Add(pNachricht);
end;


Aber das geht leider nicht so :'(
Kann mir einer helfen?!

Danke

Gollum 12. Okt 2004 20:18

Re: Auf Objekte von Unterklasse aus Zugreifen
 
Hallo,

in der Deklaration von TfChatClient fügst Du unter public folgendes ein:
Delphi-Quellcode:
public
    { Public-Deklarationen }
  property ProtokollMemo:TMemo read mProtokoll write mProtokoll;
end;
Da eine TForm nicht wissen kann, was ein abgeleitetes Objekt so alles besitzt, musst Du in Deinem Fall einen Typecast durchführen. Oder Du deklarierst kenntChatFormular gleich vom Typ TfChatClient.
Delphi-Quellcode:
procedure ChatClient.bearbeiteNachricht(pNachricht:string);
begin
  ShowMessage('hab was: ' + pNachricht);
  TfChatClient(kenntChatFormular).ProtokollMemo.Lines.Add(pNachricht);
end;

Stevie 14. Okt 2004 08:57

Re: Auf Objekte von Unterklasse aus Zugreifen
 
Zitat:

Zitat von Gollum
Hallo,

in der Deklaration von TfChatClient fügst Du unter public folgendes ein:
Delphi-Quellcode:
public
    { Public-Deklarationen }
  property ProtokollMemo:TMemo read mProtokoll write mProtokoll;
end;
Da eine TForm nicht wissen kann, was ein abgeleitetes Objekt so alles besitzt, musst Du in Deinem Fall einen Typecast durchführen. Oder Du deklarierst kenntChatFormular gleich vom Typ TfChatClient.
Delphi-Quellcode:
procedure ChatClient.bearbeiteNachricht(pNachricht:string);
begin
  ShowMessage('hab was: ' + pNachricht);
  TfChatClient(kenntChatFormular).ProtokollMemo.Lines.Add(pNachricht);
end;

:warn: Dann kannst du gleich das machen und benötigst keine Property!
Delphi-Quellcode:
procedure ChatClient.bearbeiteNachricht(pNachricht:string);
begin
  ShowMessage('hab was: ' + pNachricht);
  TfChatClient(kenntChatFormular).mProtokoll.Lines.Add(pNachricht);
end;

Gollum 15. Okt 2004 08:25

Re: Auf Objekte von Unterklasse aus Zugreifen
 
Hallo,

@Stevie: Dein Oberlehrer-Gehabe kannst Du in Zukunft unterlassen. Das Dein Vorschlag auch geht, ist mir sehr wohl bewusst. Dies ist aber aus meiner Sicht schlechter Programmierstil. Nicht umsonst gibt es Properties.

Stevie 15. Okt 2004 09:08

Re: Auf Objekte von Unterklasse aus Zugreifen
 
Zitat:

Zitat von Gollum
Hallo,

@Stevie: Dein Oberlehrer-Gehabe kannst Du in Zukunft unterlassen. Das Dein Vorschlag auch geht, ist mir sehr wohl bewusst. Dies ist aber aus meiner Sicht schlechter Programmierstil. Nicht umsonst gibt es Properties.

:oops: Sollte nicht so rüberkommen, sorry!! ich glaube, ich sollte : warn : vermeiden...
Aber Elemente auf einem Form sind ja schon published, ist das dann schlecht, wenn man auch drauf zugreift?
Sonst wären sie ja nicht published, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz