bling/tastenton bei alt-s austellen?!
-
moin
ich benutz in meinem prog den Tastenkürzel <alt>-S
abgefragt durchvoid __fastcall TMainForm::EingabeKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch (Key) { case ('S'): if (GetKeyState(VK_MENU) < 0){ //SystemParametersInfo(SPI_SETBEEP, false, 0, 0); smile(); } // case(...)
leider denkt das prog/der Builder immer ich will auf das TMainMenu zugreifen (welches nicht existiert) und haut mir dann n Pling um die ohren
da die tastenkombo öfter benutzt werden wird, soll das programm das gefälligst unterlassen
die FAQ hab ich bereits gelesen (zumindest das mitSystemParametersInfo(SPI_SETBEEP, false, 0, 0);
diese lösung finde ich zwar nicht optimal (wegen dem erhaltenbleiben des status bei fehlbeenden des progs), aber zur not muss es gehen; also hab ich das oben eingefügt damits nicht plingt
dann dachte ich mir, mache ich in OnKeyUp ne abfrage if (pling aus) mach_an;
allerdings weiss ich nicht, wie ich an das (pling an oder aus) rankomm
und jedesmal bei nem OnKeyUp den pling anzuschalten find ich auch doofgibt es wirklich keine andere möglichkeit??? (ersatz für den SystemParametersInfo-Befehl oder andere position zum setzen des an und auschaltens)
-
Key = 0;
-
danke für die ausführliche antwort
hatte vergessen zu erwähnen dass das nich funzthabs jetz über die obere lösung gemacht
hilft ja nix
-
Hallo,
Ist zwar etwas spät, aber ich bin gerade erst aus dem Urlaub gekommen.
SystemParametersInfo kann auch zur Abfrage genutzt werden mit dem ActionFlag SPI_GETBEEP.ungefähr so:
bool *isOn = new bool; SystemParametersInfo(SPI_GETBEEP,0, isOn, 0); if( !*isOn ) /* wieder anschalten */
Ciao
-
Mal abgesehen von dem Katastrophalen Listing (wozu ein new wenns einen &-Operator gibt? und das delete fehlt ebenfalls...) ist die Variante die Plings global zu deaktivieren mehr als schlecht. Vor Allem wenn mans so lösen kann wie Sunday vorgeschlagen hat.
-junix
-
Als erstes, jetzte also mit &
bool isOn; SystemParametersInfo(SPI_GETBEEP,0, &isOn, 0); if( !isOn ) /* wieder anschalten */
Natürlich ist das dauerhafte Deaktivieren schlecht. Hat M@xwell nicht oben gesagt, dass Sundays Lösung bei Ihm nicht geht ?
Ich hab das bei mir mal ausprobiert, indem ich folgende OnKeyDown-Routine verwendet habe (mit KeyPreview auf true)
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if( Shift.Contains(ssAlt) && Key == 'S') { Key = 0; } }
Das Programm geht da auch rein und Key wird auf 0 gesetzt, der Pling kommt aber trotzdem.
-
Und was lernen wir daraus? Nichts.
Also vielleicht solltest du ein MainMenu mit einbinden, aber alle Menüpunkte Visible auf false setzen, so gibts (bei mir zumindest) keinen Beep und alles läuft wunderbar. Aber mal so für Kritiker meiner Antwort: Warum so einfach, wenns auch kompliziertger geht, hä?
-
Hallo
Daraus lernen wir nur das manche Dinge etwas komplizierter sind.
Wenn du das so machen willst, Spieleprogrammierer, dann musst du auch für jede mögliche Alt-Tastenkombination einen Menupunkt erstellen, denn bei denen die es nicht gibt, kommt dann trotzdem der Ton (Bei mir übrigens auch wenn der Menupunkt nicht sichtbar ist. Nur disabled aber visible funktioniert). Das was du vorschlägst ist eine nicht so quick aber sehr dirty Lösung.Ciao
-
Spieleprogrammierer schrieb:
Also vielleicht solltest du ein MainMenu mit einbinden, [...bla schluder...]
Klassischer Fall von Resourcenverschwendung und mit FLAK auf Spatzen zu schiessen. Was lernen wir daraus? Diese Lösung sollte man auf keinen Fall verwenden.
Wenn allerdings dieser Gedanke aus deiner Ausbildung stammt, wunderts mich bald nichtmehr, dass ich bald für jede noch so kleine Software 1/4GB RAM und 2GHz Takt brauche...-junix
-
Wäre doch toll für die Hardware-Industrie, oder? *g*
Also bei mir beept's nur, wenn man Alt+D oder so drückt, nicht bei Alt+S, da ich das zugewiesen hab. Und Junix, so viel resourcen braucht sone Menüleiste nun auch wieder nicht. Sicherlich darf man nicht mit 'ner Flak auf Fliegen schießen, aber vielleicht mit 'ner Fliegenklatsche drauf einschlagen. Gut, vielleicht hab ich mich geirrt, vielleicht gehts auch nur bei mir, aber solange ich das Programm nur für mich mache, gehts ja. Und übrigens Junix, der Gedanke kam nicht aus meiner Ausbildung. Gehst du in den Ferien zur Berufsschule? -Ich nicht.
-
Spieleprogrammierer schrieb:
Und Junix, so viel resourcen braucht sone Menüleiste nun auch wieder nicht.
Kleinvieh macht auch mist... Wenn man erst mal mit der Denkensweise anfängt, dann gehts weiter mit "och da das bischen braucht auch keine Ressourcen und das auch nicht und das und das... und all die Abrundungsfehler rächen sich dann klammheimlich...
Es ist durchaus nicht verboten auf guten Stil zu achten und mit Ressourcen sparsam umzugehen... leider sehen das die wenigsten so. Es täte vielen Windows-Software-Entwicklern ganz gut, sie müssten sich mal mit den Beschränkten Ressourcen und der beschränkten Power eines Embeddedsystems zurecht finden.... das gäb ne ganz neue Dimension.
Spieleprogrammierer schrieb:
aber solange ich das Programm nur für mich mache, gehts ja.
Hier muss ich natürlich die Frage stellen wieso jeder das Gefühl hat, wenn er für sich selber wurschtelt, muss er einen Stilbruch begehen. Wieso muss man zwei Stile und zwei Denkensweisen pflegen? Wieso kann man nicht einfach generell sich bemühen den selben Stil in der Arbeit und beim Eigenbau zu pflegen?
Spieleprogrammierer schrieb:
Und übrigens Junix, der Gedanke kam nicht aus meiner Ausbildung. Gehst du in den Ferien zur Berufsschule?
Ne, ich geh schon länger garnicht mehr auf die Berufsschule, da die der Meinung gewesen sind, sie könnten mich mit dipl. nach Hause schicken und ich könne das was ich können muss...
-junix