automatisch springen wie mit TAB



  • Hi allerseits,

    ich habe ein Problem 🙂 Ich habe bei meinem Programm Zwecks
    angepasster Eingabe soll Enter sich verhalten wie TAB. Also ich drücke
    Enter und möchte dann in das nächste Edit gemäß meiner Tab-Reihenfolge springen.

    PreTranslateMessage habe ich schon überschrieben und Enter abgefangen.
    Nur bekomme ich die tab-funktionalitüte da nicht rein.

    einer ne Idee 😕

    mfg
    tobi



  • Du kannst die Message doch ändern...

    Tu doch so als wäre Tab gedrückt worden. 🙂 Und dann weitergeben an die nächste Funktion.

    Das wäre meine Idee.



  • Hi

    also ich würde mir einen Accelerator definieren, denn dann kannst du auch gleich noch den eingegebenen Wert prüfen.

    Gruss Marc



  • Tu doch so als wäre Tab gedrückt worden.

    Das will ich ja, nur wie 😕

    also ich würde mir einen Accelerator definieren

    ?? Bahnhof *g* ?? ich habe 7 CEdits und dann einen Button. Ich möchte nun das er von einem CEdit ins andere springt wenn ich Enter drücke. Wenn ich aber auf dem Button bin soll dieser ausgeführt werden.
    Die Unterscheidung habe ich schon. Ich vergleiche einfach das hwnd der msg mit dem hwnd des Buttons, sind diese Identisch übergebe ich die msg weiter an CDialog. Sind sie nicht gleich kommt momentan ne msgbox. Allerdings soll da jetzt die TAB Funktionalität rein.

    thx
    mfg
    tobi



  • Du kriegst doch eine Nachricht in der drinsteht, dass Enter gedrückt wurde. Die änderst du so um, dass sie aussagt, dass Tab gedrückt wurde. Jetzt steht irgendwie VK_ENTER drin und du schreibst halt VK_TAB da rein - oder so ähnlich.

    Wenn du hier mal ein wenig Quelltext postest, kann ich das besser erklären. Bist du also mal eben so nett? 🙂



  • ja sicher kann ich bissel Code posten:

    BOOL CDlg_Action::PreTranslateMessage(MSG* pMsg) 
    {
    	if(!((GetDlgItem(IDC_ERFASSEN)->GetSafeHwnd() == pMsg->hwnd) || (GetDlgItem(IDC_EINFUEGEN)->GetSafeHwnd() == pMsg->hwnd)))
    	{
    		switch( pMsg->message )
    		{
    			case WM_KEYDOWN:
    					switch( pMsg->wParam )
    					{
    						case VK_RETURN:
    							pMsg->wParam = VK_TAB;
    							break;
    					}
    		}
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }
    

    so wie es da steht geht es aber schon. Ich wusste nicht das ich einfach die msg selbst verändern kann.

    thx 😉 funzt schon alles..



  • Schön, dass es geht. Ich hab es nämlich noch nie gemacht - es war nur der logische Weg. 🙂

    Aber ein Problem weniger, das mich noch erwischen kann... 😉


Log in to reply