Zeiger auf Funktion von Memo
-
Hallo,
Ich habe ein Formular mit einer Memo-Komponente.
Jetzt möchte ich in einer Funktion als Parameter einen Zeiger auf eine Funktion
der Memo-Komponente übergeben.
Habe schon alles versucht. Aber der Compiler versteht mich nicht
So sieht mein Formular aus. Also nichts besonderes
class TForm1 : public TForm { __published: // IDE-verwaltete Komponenten TButton *BSenden; TMemo *Memo1; TEdit *Edit1; TButton *Button1; TButton *Button2; TStatusBar *StatusBar; TProgressBar *ProgressBarFile; TProgressBar *ProgressBarDownload; TOpenDialog *OpenDialog1; void __fastcall BSendenClick(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall Button1Click(TObject *Sender); void __fastcall Memo1KeyPress(TObject *Sender, char &Key); void __fastcall Button2Click(TObject *Sender); private: // Benutzer-Deklarationen public: // Benutzer-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- TForm1 *Form1; //---------------------------------------------------------------------------und so die Funktion:
void EmpfangAnzeigen(TForm1* Form, void (TForm1::Memo1::*Fkt)(char* ), char* Data) { (Form->*Fkt)(Data); }Hierbei erhalte ich immer den Fehler: E2090 Qualifizierer ‘bezeichner’ ist kein Name einer Klasse oder einer Struktur
Aufrufen wollte ich die Funktion so:
EmpfangAnzeigen(&Form1, &TForm1::Memo1::SetSelText, Data);Aber bis hierhin kommt der Compiler erst gar nicht.
Wie muß ich die Funktion definieren bzw. aufrufen, damit der Compiler keine Fehler meldet.
Danke im Voraus für Eure Bemühungen.Grüße
Andreas
-
Hallo aheim,
versuch es doch einfach diese Art
void __fastcall TErrLogFile::getOnErrLogInt( TObject *Sender, TFehlerListe* ErrText, // Fehlerliste fuer einen Fehler TMemo* ErrorMainMemo) { AnsiString astrHilf; // neuen Fehlertext in den Ringpuffer schreiben und auf max. 252 Byte // begrenzen um "\r\n" anhaengen zu koennen. StrLCopy( ReadErrorMes->Err_RingInt .Err_txt[ReadErrorMes->Err_RingInt.iwrite].Text, ErrText->cErrtxt, 252); // Fehlermeldung in der Oberflaeche ausgeben ErrorMainMemo->Lines->Add (KOMPONENTE[ErrText->iKomponete] +" "+ FEHLRTYPE[ErrText->iErrType] +" " +ReadErrorMes->Err_RingInt .Err_txt[ReadErrorMes->Err_RingInt.iwrite].Text);Viel Erfolg
Evi48
-
Hallo evi48,
danke schon mal vorab.
Aber leider weiss ich nicht wieviele Zeichen ankommen. Es können immer unterschiedliche sein und wann bzw. ob mal ein CR/LF kommt ist auch nicht klar.
Es soll jedes Zeichen einzeln und sofort angezeigt werden.
Daher kann ich nicht mit Add arbeiten.Das ganze hat auch schon mal funktioniert.
Da habe ich einfach Form1->Memo1->SetSeltextBuf(Empfangsdaten) aufgerufen )oder so ähnlich).Allerdings habe ich dafür eine komplette cpp-Datei includiert.
Das hatte mir nicht gefallen und habe sie daher dem Projekt hinzugefügt.
Wenn ich nur die Headerdatei include und oben die Funktion aufrufen erhalte ich einen Zugriffsfehler.
Daher dachte ich mir einfach einen Zeiger auf die Funktion zu übergeben.
Hoffe es ist klar was ich damit meine. Bin im Moment im Zeitdruck.Trotzdem Danke.
-
Hallo aheim,
ich hoffe ich habe dich verstanden. Übergib doch einfach in deine Funktion einen Zeiger auf das Memo und einen Zeiger auf die chr.void EmpfangAnzeigen(TForm1* Form, TMemo *Memo1, char* Data) { Memo1->SetSelTextBuf(Data); }Auf diese Weise hast du alle Funktionen des Memo zur Verfügung.
Evi48
-
Hallo,
ich habe noch einen Fehler entdeckt TForm1 ist keine Klasse sondern nur TFormvoid EmpfangAnzeigen(TForm* Form, TMemo *Memo1, char* Data) { Memo1->SetSelTextBuf(Data); }Aufruf der Funktion:
EmpfangAnzeigen(MyForm, MyMemo, MyData);Evi48
-
Hallo,
Kannst du mir verraten, wozu hier ein Pointer auf TForm übergeben wird?
Bezüglich der Funktionspointer vom Anfang:
Soweit ich weiss ist es nicht möglich Funktionspointer von nichtstatischen Memberfunktionen zu erzeugen bzw. zu übergeben (wegen this).
Die Funktion von evi48 (ohne dem TForm Parameter) sollte so eigentlich funktionieren.Ciao
-
Hallo Braunstein,
ich habe lediglich versucht eine Problemlösung zu Zeigen nicht einen Funktionspointer zu übergeben.Evi48
-
Das mit dem Funktionspointer war auch nicht auf dich bezogen, sondern auf den ersten Beitrag dieses Threads.
-
Guten Morgen Braunstein,
Entschuldigung, habe wohl nicht bis zu Ende gelesen.Einen angenehmen Tag
Evi48