Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RichEdit einer Klasse ansprechen (https://www.delphipraxis.net/28091-richedit-einer-klasse-ansprechen.html)

Pseudemys Nelsoni 19. Aug 2004 15:00


RichEdit einer Klasse ansprechen
 
moin,

habe folgendes:

Delphi-Quellcode:
TMyClass = class(TForm2)
  public
    ClientSocket: TClientSocket;
    procedure SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
end;

...

procedure TMyClass.SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
begin
  ???.Richedit1.lines.add(Socket.Receivetext);
end;

Da ist auch schon meine Frage... TForm2 enthält ein richedit.... nur wie füge ich dem richedit lines aus einer meiner methoden zu?

Das einzige was kompilierbar(aber falsch(fehler)) war, war das hier:

Delphi-Quellcode:
self.Richedit1.lines.add(Socket.Receivetext);
dann habe ich auch noch folgendes getestet:

Delphi-Quellcode:
TMyClass.Richedit1.lines.add(Socket.Receivetext);
ging aber nicht zu kompilieren...

wie stell ich das nun an dem richedit text hinzuzufügen?

SirThornberry 19. Aug 2004 15:05

Re: RichEdit einer Klasse ansprechen
 
wenn form2 das richedit enthält so muss es auch heißen:
Delphi-Quellcode:
Form2.Richedit1.lines.add(Socket.Receivetext);
Wenn das Richedit nicht über per Delphi-IDE aufs Formular gebracht hast musst du natürlich noch die Instanz des Richedit initialisieren.

Pseudemys Nelsoni 19. Aug 2004 15:28

Re: RichEdit einer Klasse ansprechen
 
hallo sirthornberry,

da ich zur "designzeit" kein form2 habe kann ich es damit ja auch nicht ansprechen.

Es lässt sich wenn ich es so habe:

Delphi-Quellcode:
TMyClass = class(TForm2)
  public
    ClientSocket: TClientSocket;
    constructor Create(AOwner: TComponent); override;
    procedure SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
end;

...

constructor TMyClass.Create(AOwner: TComponent);
begin
  inherited;
  RichEdit1.Create(nil);
end;

procedure TMyClass.SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
begin
  Richedit1.lines.add(Socket.Receivetext);
end;
zwar kompilieren, aber der zugriff erzeugt immer einen fehler... das "RichEdit1.Create(nil);" dürfte sowieso falsch sein, da das fenster mit dem richedit ja schon funktioniert...also kannst du das hier ruhig ignorieren ich habs eh wieder draussen....

ich kann nur nicht auf das "ding" zugreifen :(

Stevie 19. Aug 2004 15:29

Re: RichEdit einer Klasse ansprechen
 
Zitat:

Zitat von Pseudemys Nelsoni
habe folgendes:
Delphi-Quellcode:
TMyClass = class(TForm2)
  public
    ClientSocket: TClientSocket;
    procedure SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
end;

...

procedure TMyClass.SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
begin
  ???.Richedit1.lines.add(Socket.Receivetext);
end;
Da ist auch schon meine Frage... TForm2 enthält ein richedit....

Da TMyClass von TForm2 abgeleitet ist und RichEdit1 in TForm2 deklariert ist:
Delphi-Quellcode:
RichEdit1.Lines.Add(Socket.ReceiveText);
P.S. Aber TForm2 hast du in der IDE erstellt, ja?

Pseudemys Nelsoni 19. Aug 2004 15:32

Re: RichEdit einer Klasse ansprechen
 
hallo stevie,

danke für dein post.

das habe ich leider auch schon getestet(siehe mein post zuvor) :(

KrasserChecker 19. Aug 2004 15:49

Re: RichEdit einer Klasse ansprechen
 
:wiejetzt:
Hmm, es wäre hilfreich, wenn Du mal die Fehlermeldung posten könntest.

Pseudemys Nelsoni 19. Aug 2004 15:52

Re: RichEdit einer Klasse ansprechen
 
ich sagte doch das es n zugriffsfehler ist... willst du die adresse des fehlers?

k hier(wenns hilft):

"Zugriffsverletzung bei Adresse 004A2108 in Modul 'Project1.exe'. Lesen von Adresse 000002F8"

KrasserChecker 19. Aug 2004 15:58

Re: RichEdit einer Klasse ansprechen
 
Davon, dass es eine Zugriffsverletzung ist habe ich nichts gelesen (ansonsten: shame on me).

Geht das hier:

Delphi-Quellcode:
procedure TMyClass.SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
begin
  ShowMessage(Socket.Receivetext);
  ...
end;
Ansonsten: Wo und wie wird das Objekt vom Typ TMyClass erzeugt und wie wird die Methode "SockReadProc" aufgerufen?

Pseudemys Nelsoni 19. Aug 2004 16:03

Re: RichEdit einer Klasse ansprechen
 
moin,

jo, mit Showmessage gehts, also muss es an dem richedit liegen oder?

KrasserChecker 19. Aug 2004 16:04

Re: RichEdit einer Klasse ansprechen
 
Richtig. ( :gruebel: )

Wo und wie wird das Objekt vom Typ TMyClass erzeugt und wie wird die Methode "SockReadProc" aufgerufen?

Pseudemys Nelsoni 19. Aug 2004 16:07

Re: RichEdit einer Klasse ansprechen
 
hallo,

ich erzeuge es aus einer anderen unit heraus:

Delphi-Quellcode:
procedure Connect;
begin
  if Form4.CheckBox1.Checked then
  begin
    SetLength(Serv, length(Serv)+1);
    with Serv[High(Serv)] do
    begin
      StatusWindow := TStatusWindow.Create(nil);
      StatusWindow.StatusWindowName := 'blubb';
      StatusWindow.Caption := StatusWindow.StatusWindowName;
      StatusWindow.StatusButton := TToolButton.Create(StatusWindow);
      StatusWindow.StatusButton.Parent := Form1.ToolBar2;
      StatusWindow.StatusButton.Caption := '*' + StatusWindow.StatusWindowName;
      StatusWindow.StatusButton.Show;
      StatusWindow.ClientSocket := TClientSocket.Create(StatusWindow);
      @StatusWindow.ClientSocket.OnRead := @TStatusWindow.SockReadProc;
      @StatusWindow.ClientSocket.OnError := @TStatusWindow.SockErrorProc;
      StatusWindow.ClientSocket.Host := 'server';
      StatusWindow.ClientSocket.Port := port;
      StatusWindow.ClientSocket.Open;
    end;
  end;
end;

KrasserChecker 19. Aug 2004 16:11

Re: RichEdit einer Klasse ansprechen
 
Müssten diese Zeilen
Delphi-Quellcode:
      @StatusWindow.ClientSocket.OnRead := @TStatusWindow.SockReadProc;
      @StatusWindow.ClientSocket.OnError := @TStatusWindow.SockErrorProc;
nicht eigentlich so aussehen?

Delphi-Quellcode:
      StatusWindow.ClientSocket.OnRead := StatusWindow.SockReadProc;
      StatusWindow.ClientSocket.OnError := StatusWindow.SockErrorProc;

Pseudemys Nelsoni 19. Aug 2004 16:13

Re: RichEdit einer Klasse ansprechen
 
dann bekomme ich fehler:

Delphi-Quellcode:
[Fehler] Unit1.pas(65): Inkompatible Typen: 'TSocketNotifyEvent' und 'Procedure'
[Fehler] Unit1.pas(66): Inkompatible Typen: 'TSocketErrorEvent' und 'Procedure'
bin mir sicher das das nicht falsch is, es muss am richedit liegen, denn mit showmessage gehen die beiden ereignisse ja (also onread und onerror)

Stevie 19. Aug 2004 16:15

Re: RichEdit einer Klasse ansprechen
 
Nö, das geht so!!! (Das T weg!!!) :mrgreen:

P.S.: Ich kann's leider nicht testen, weil ich gerade nur Delphi6 da habe... (XP-Klamotten fehlen...)

Pseudemys Nelsoni 19. Aug 2004 16:30

Re: RichEdit einer Klasse ansprechen
 
stimmt wenn das t weg ist geht das...aber mit @ ja auch :) letzendlich tauscht man ja so oder so die adresse oder ? *g*

nun aber zu meinem ursprungsproblem! wieso kann ich nicht auf das richedit zugreifen? :\

KrasserChecker 19. Aug 2004 16:34

Re: RichEdit einer Klasse ansprechen
 
Das stimmt so nicht ganz

Diese Zuweisung
Delphi-Quellcode:
@StatusWindow.ClientSocket.OnRead := @TStatusWindow.SockReadProc;
weist einem Objekt den Zeiger auf eine Methode in der Klasse "TStatusWindow" zu. Das das überhaupt geht liegt an den Klassenmethoden, aber soetwas wird hier nicht genutzt.

Diese Zuweisung hingegen
Delphi-Quellcode:
StatusWindow.ClientSocket.OnRead := StatusWindow.SockReadProc;
weist einem Objekt den Zeiger auf eine Methode aus einem anderen Objekt zu.

Es würde micht nicht wundern, wenn das Programm jetzt funktioniert?!

Pseudemys Nelsoni 19. Aug 2004 16:40

Re: RichEdit einer Klasse ansprechen
 
ahhhh, du hast recht, funktioniert :mrgreen:

Vielen dank :)

Luckie 20. Aug 2004 12:11

Re: RichEdit einer Klasse ansprechen
 
Wie wäre es, wenn du das Richedit deiner Klasse / Methode mit übergibst?

Stevie 20. Aug 2004 12:15

Re: RichEdit einer Klasse ansprechen
 
Zitat:

Zitat von Luckie
Wie wäre es, wenn du das Richedit deiner Klasse / Methode mit übergibst?

:gruebel: Das RichEdit ist doch Bestandteil der Vorfahrklasse!!!


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