Tastatureingabe vom Program aus



  • Hi,
    Ich erhalte Zeichen über eine Kommschnittstelle, und will diese in einer Multiline Editbox darstellen.

    ich habe Momentan dazu folgenden Code:

    THREDPARAM* pParam = (THREDPARAM*) lpParam;
    	CExpertEdit* ed = pParam->ped;
    	CString Buff = "";
    //	char buff[10];
    	char c = 0;
    	unsigned long X;
    
    	WriteFile(pParam->hcom, CMD_RAW, strlen(CMD_RAW), &X, NULL);
    	WriteFile(pParam->hcom, " 0\r", 3, &X, NULL);
    	while (pParam->Continue) {
    		ReadFile(pParam->hcom, &c, 1, &X, NULL);
    		if (X == 0) {
    			Sleep(200);
    			continue;
    		}
    		if (c == '\n') {
    			continue;
    		}
    		if (c == '\r') {
    			Buff += "\r\n";
    		} else {
    			Buff += c;
    		}
    		ed->SetWindowText(Buff);
    		ed->LineScroll(ed->GetLineCount());
    	}
    //	WriteFile(pParam->hcom, CMD_RAW, strlen(CMD_RAW), &X, NULL);
    //	WriteFile(pParam->hcom, " 1\r", 3, &X, NULL);
    //	GetStringFromCom(buff, pParam->hcom);
    //	GetStringFromCom(buff, pParam->hcom);
    
    	return 0;
    

    Aber am liebsten hätte ich eine Möglichkeit, die empfangenen Characters so einzugeben, als wenn ich Sie über das Keybord eingebe.
    Wie kann ich das bewerkstelligen?

    Wenn nicht, wie kann ich den Cursor ans Ende bringen?

    Vielen Dank für jegliche Hilfe



  • Was hast du da für einen Spagheti code?

    1. was willst du jetzt?

    - tastatureingaben
    - zeichen automatisch über schnittstelle erhalten

    ??

    sind 2 paar schuhe. ok du willst praktisch automtisch über schnittstelle.dann hast aber dumme überschrift!

    Wenn folgendes ohne fehler compiliert, fress ich einen besen

    char c = 0;
    

    was soll das Sleep(200) da drinnen?

    ich nehme mal an die klasse

    CExpertEdit

    hast du von irgendwo runtergeladen. denkst du ich kenne alle fkt? weiss ich wie die fkt WriteFile funktioniert? oder ReadFile?

    und warum hast du

    unsigned long X;
    

    und vergleichst das mit zeichensätze?

    seit wann übergibt man in einer fkt das referenzeichen mit?

    siehe

    WriteFile(pParam->hcom, CMD_RAW, strlen(CMD_RAW), &X, NULL);  //<-- das X hier
    

    Wenn nicht, wie kann ich den Cursor ans Ende bringen?

    ausserdem kenn ich die fkt der klasse CExpertEdit nicht. ich denke mal es gibt da maybe eine fkt die ans ende springt in dem zu bearbeitenden Editfeld.

    Ist die Klasse von CEdit abgeleitet?

    Also wirklich lol der ganze post von dir. sorry ist so.



  • Hallo newkid.

    Du scheinst dich wohl mit gewissen Sachen nicht so ganz auszukennen.

    Also hier ein paar Erläuterungen zu deinen Fragen:

    char c = 0;
    

    wird sehrwohl vom Compiler verstanden. Char in c++ sind nichts anderes als Integer im Bereich von -127 bis 128, also läßt sich durchaus ein char als 0 initialisieren

    Sleep(200);
    

    Dieser Code wird innerhalb eines Workingthreads aufgefufen, darum der Sleep(200), damit dieser Thread nicht unnötig die Prozessorleistung belastet.

    CExpertEdit
    

    ist eine von mir abgeleitete Klasse von CEdit, mit Überschreibung der Funktion "OnChar". Diese soll nämlich nicht die editierten Zeichen im Editierfelt ausgeben, sondern zur seriellen Schnittstelle senden.

    ReadFile(..)
    WrietFiel(..)
    

    ApiFunktionen, mit denen man z.B. an die serielle Schnittstelle Zeichen senden kann, bzw. von Ihr empfangen. Schaue da mal unter Hilfe in Visual C++ nach.

    X: mit &X übergebe ich den Pointer auf die Variable X, nicht den Wert, wie du in der Beschreibung sehen wirst, wird ein Pointer Erwartet, denn somit kann nach der Rückgabe der Fuktion ihr Wert neu aufgefüllt werden. X ist dann die Anzahl der Zeichen die tatsächlich gelesen oder geschriegen wurden.
    Ist X=0, wurden also keine Zeichen gelesen oder geschrieben. Damit kann man dann überprüfen, ob ein Timeout (siehe Struktur COMMTIMEOUTS unter Hilfe) geschehen ist oder nicht.

    Was ich will, ist, die gelesenen Zeichen der Commschnittstelle so zu editieren, als wenn ich sie mit dem Keyboard Editieren würde. Ich denke da z.B an den Aufruf der Funktion

    CEditOnChar(..)
    

    diese kann ich aber nicht aufrufen, da Sie nicht pulic ist! Scheinbar reicht das auch noch nicht. Muß ich irgendwie die Nachricht WM_CHAR senden?
    doch wie sage ich dann Windows, welches Zeichen editiert werden soll?

    Falls das alles zu schwer ist, würde ich gerne wissen, wie ich die Cursor Position in einer EditBox Per Code verändern kann!

    Also falls mir da irgendjemand weiterhelfen kann, wäre ich sehr dankbar.



  • Also maybe kann

    dir das hier

    ???

    weiter helfen

    echt ey

    lol

    musst du in dein fkt einfgn

    Stetzt den Cursor ans E (Ende)

    von dein EF (Eingabefeld).

    Musstma mit d. Werten in

    SetSel(...)

    rumspielen.

    Plus od. minus ne Zahl

    maybe 5 od. 8 od. 3 od. 2

    lol egal

    dann kannst du damit auch den

    Cursor mitendrin setzen

    oda

    ein Stk. von der Eingabe in

    dem EF (Eingabefeld)

    markieren.

    CString txt;
    GetDlgItem(IDC_EDIT1)->GetWindowText(txt);
    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetFocus();
    ((CEdit*)GetDlgItem(IDC_EDIT1))->SetSel(txt.GetLength(),txt.GetLength());
    


  • Hi Isbeau, alles klar? So kenn ich dich ja gar nicht 😉 😃



  • isabeau = newkid_



  • follchecker schrieb:

    isabeau = newkid_

    Argh,... NEIN !
    Ich dachte nur, ich probiere den Stiel auch mal aus. Muss doch irgendetwas dran sein, so zu schreiben ?!?
    😃



  • das ist assi style


Anmelden zum Antworten