![]() |
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:
dann habe ich auch noch folgendes getestet:
self.Richedit1.lines.add(Socket.Receivetext);
Delphi-Quellcode:
ging aber nicht zu kompilieren...
TMyClass.Richedit1.lines.add(Socket.Receivetext);
wie stell ich das nun an dem richedit text hinzuzufügen? |
Re: RichEdit einer Klasse ansprechen
wenn form2 das richedit enthält so muss es auch heißen:
Delphi-Quellcode:
Wenn das Richedit nicht über per Delphi-IDE aufs Formular gebracht hast musst du natürlich noch die Instanz des Richedit initialisieren.
Form2.Richedit1.lines.add(Socket.Receivetext);
|
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:
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....
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; ich kann nur nicht auf das "ding" zugreifen :( |
Re: RichEdit einer Klasse ansprechen
Zitat:
Delphi-Quellcode:
P.S. Aber TForm2 hast du in der IDE erstellt, ja?
RichEdit1.Lines.Add(Socket.ReceiveText);
|
Re: RichEdit einer Klasse ansprechen
hallo stevie,
danke für dein post. das habe ich leider auch schon getestet(siehe mein post zuvor) :( |
Re: RichEdit einer Klasse ansprechen
:wiejetzt:
Hmm, es wäre hilfreich, wenn Du mal die Fehlermeldung posten könntest. |
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" |
Re: RichEdit einer Klasse ansprechen
Davon, dass es eine Zugriffsverletzung ist habe ich nichts gelesen (ansonsten: shame on me).
Geht das hier:
Delphi-Quellcode:
Ansonsten: Wo und wie wird das Objekt vom Typ TMyClass erzeugt und wie wird die Methode "SockReadProc" aufgerufen?
procedure TMyClass.SockReadProc(Sender: TObject; Socket: TCustomWinSocket);
begin ShowMessage(Socket.Receivetext); ... end; |
Re: RichEdit einer Klasse ansprechen
moin,
jo, mit Showmessage gehts, also muss es an dem richedit liegen oder? |
Re: RichEdit einer Klasse ansprechen
Richtig. ( :gruebel: )
Wo und wie wird das Objekt vom Typ TMyClass erzeugt und wie wird die Methode "SockReadProc" aufgerufen? |
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; |
Re: RichEdit einer Klasse ansprechen
Müssten diese Zeilen
Delphi-Quellcode:
nicht eigentlich so aussehen?
@StatusWindow.ClientSocket.OnRead := @TStatusWindow.SockReadProc;
@StatusWindow.ClientSocket.OnError := @TStatusWindow.SockErrorProc;
Delphi-Quellcode:
StatusWindow.ClientSocket.OnRead := StatusWindow.SockReadProc;
StatusWindow.ClientSocket.OnError := StatusWindow.SockErrorProc; |
Re: RichEdit einer Klasse ansprechen
dann bekomme ich fehler:
Delphi-Quellcode:
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)
[Fehler] Unit1.pas(65): Inkompatible Typen: 'TSocketNotifyEvent' und 'Procedure'
[Fehler] Unit1.pas(66): Inkompatible Typen: 'TSocketErrorEvent' und 'Procedure' |
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...) |
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? :\ |
Re: RichEdit einer Klasse ansprechen
Das stimmt so nicht ganz
Diese Zuweisung
Delphi-Quellcode:
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.
@StatusWindow.ClientSocket.OnRead := @TStatusWindow.SockReadProc;
Diese Zuweisung hingegen
Delphi-Quellcode:
weist einem Objekt den Zeiger auf eine Methode aus einem anderen Objekt zu.
StatusWindow.ClientSocket.OnRead := StatusWindow.SockReadProc;
Es würde micht nicht wundern, wenn das Programm jetzt funktioniert?! |
Re: RichEdit einer Klasse ansprechen
ahhhh, du hast recht, funktioniert :mrgreen:
Vielen dank :) |
Re: RichEdit einer Klasse ansprechen
Wie wäre es, wenn du das Richedit deiner Klasse / Methode mit übergibst?
|
Re: RichEdit einer Klasse ansprechen
Zitat:
|
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