www.mikrocontroller.net

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


Autor: Sebastian B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den Button einfach nur als "Default" festlegen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Locutus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Locutus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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()"

Autor: Sebastian B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.