Forum: PC-Programmierung Nach Eingabe mit Enter bestättigen


von Sebastian B. (Gast)


Lesenswert?

Hallo,

also ich habe ja schon seit langen meinen COM-Port im Griff mittels
Visual Studio 6.0 C++. Allerdings habe ich immer noch einen kleinen
Schönheitsfehler, der mich immer mehr aufregt. Ich bin einfach nicht in
 der Lage folgendes meiner Bedienoberfläche beizubringen.

Ich habe ein normals Eingabefeld in das ich einen Wert z.B. 0xAA
eintrage. Direkt daneben habe ich einen Button "Send value". So weit
so gut. Jetzt möchte ich, nachdem ich den Wert 0xAA eingetragen habe,
einfach auf Enter drücken und der Button "Send value" wird gedrückt,
bzw. die Funktion zum Senden soll gestartet werden.

Das schaffe ich einfach nicht. Kann mir mal jemand einen Tip geben wie
das funktioniert.

Vielen Dank,
Sebastian B.

von Timmo H. (masterfx)


Lesenswert?

Du musst den Button einfach nur als "Default" festlegen.

von Sebastian (Gast)


Lesenswert?

Ja, aber wenn ich jetzt mehrer Eingabefelder mit den dazugehörigen
Buttons habe. Was dann???

In der Programmiersprache TCL kann man die Eingabefelder mit Buttons
verbinden. Das muss doch bei C++ auch irgendwie gehen.

von Stefan (Gast)


Lesenswert?

Ich denke, du hast ein logisches Problem in der Anwendung bzw. handelst
dir Bedienprobleme ein. Entweder will ich was senden und drücke dann
auch den entsprechenden "Send" Knopf oder ich lasse es und drücke ihn
nicht.

Angesehen davon ist die technische Lösung einfach:

Schick deinem Fenster bzw. all deinen deinen Buttons "Send value"
beim Drücken der Enter-Taste (bzw. des Default-Buttons) eine Nachricht
und führe dann erst die Defaultaktion aus.

von Stefan (Gast)


Lesenswert?

Nachtrag: Wo ich gerade mit dem Antwortformular hier spiele...
Vielleicht dämmert mir erst jetzt, was du genau willst.

1/ Beim Anklicken eines Eingabefelds kannst du eine Nachricht erhalten,
welches Eingabefeld angeklickt wurde. OnClick o.ä. heissen die Messages
dazu.

2/ Bei einem ENTER wird ein als DEFAULT gekennzeichneter Button
aufgerufen.

3/ Der Messagehandler des Defaultbuttons kann jetzt an den Send-Button
des zuvor gemerkten Eingabefeldes eine Nachricht schicken.

4/ Bingo.

von Locutus (Gast)


Lesenswert?

Hallo Sebastian,

du erhälst doch für jedes Ereigniss auf deiner Oberfläche eine
Nachricht von Windows. Wenn du mit normal Win32Api arbeitest bekommst
du Nachrichten von Windows und wenn du mit MFC arbeitest bekommst ein
Event (was nix anderes is nur schöner verpackt).

Dann prüfst du beim Event OnKeyDown oder OnKeyUp je nach dem was du
magst ob "Enter" gedrückt wurde. Wenn ja dann rufst du die gewünschte
Funktion auf, in deinem Fall die Sendemethode.

Kannst ja mal schreiben, ob du mit MFC oder WinApi oder was anderem
arbeitest.

Gruß
Locutus

-----------------------------------
Widerstand ist zwecklos!

von Sebastian (Gast)


Lesenswert?

Hallo und Danke für Eure doch kreativen Ideen. So kann man es bestimmt
irgendwie hinbiegen :-).

@Locutus: Ich arbeite mit MFC-Methoden. Ich muss allerdings zugeben,
dass ich nicht besonders sattelfest in der Windowsprogrammierung bin
und das alles für mich sehr nach Kampf aussieht. Aber ich werd's
probieren.

von Sebastian (Gast)


Lesenswert?

Mir ist die Theorie schon sehr klar. Was ich noch nicht in meinem Code
finden kann ist der MessageHandler. Das muss doch eine Funktion sein,
die immer dann aufgerufen wird, wenn das Fenster eine Nachricht
erhält.

Kann mir evtl. jemand sagen wie diese Funktion bei Visual C++ heißt?

von Locutus (Gast)


Lesenswert?

Hallo Sebastian,

also bei der MFC gibt es keine direkte Messagehandler Methode. Du
ordnest den Events die entsprechenden Methoden zu. Das passiert da wo

"BEGIN_MESSAGE_MAP(...)" steht. Das gibt es für jedes Fenster. Sprich
jedes Fenster hat seinen eigenen MessageHandler.

Du gibst zwischen "BEGIN_MESSAGE_MAP(...)" und "END_MESSAGE_MAP()"
an, welchem Event du welche Funktion zuordnest.

z.B. "ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)" Wenn das Commando
ID_FILE_NEW auftritt, wird die Funktion OnFileNew der Klasse CWinApp
aufgerufen. Jetzt musst du noch raussuchen, welches Event dein
Tastendruck ist. Müsste ON_WM_KEYUP()

Bsp.:

"BEGIN_MESSAGE_MAP(...)
  ON_WM_KEYUP()
END_MESSAGE_MAP()"

von Sebastian B. (Gast)


Lesenswert?

Hallo,

es funktioniert :-). War ein Tag harter Arbeit. Aber jetzt weiß ich
viel, viel besser über das Prinzip Windows und Visual C++ bescheid.

Merci, für Eure Anregungen.
Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.