Tastenzustand EINFG/NUMLOCK anzeigen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von Manfred »

Hallo Ingo,
in der Doku gibt es einen Punkt Hinweise für Clipper Programmierer. Vieleicht hilft der Dir ja weiter?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von BJelinek »

Hallo Ingo,

Ich habe auch ein Programm das fast 1 zu 1 in Clipper und Xbase++ läuft.

Bei mir ändert sich der Cursor nicht wenn man mit "ins" umschaltet.
sowohl im Clipper als auch im Xbase++ Programm.

Ich nehme an, dass in Deinem alten Clipper-Programm auch in der GETSYS.PRG
ein Änderung zum Standard vorgenommen wurde.
Falls Ja, diese Änderungen ins Xbase++ GETSYS.PRG übertragen.

Ich benutze auch keine Standard GETSYS.PRG sowohl in Clipper als auch Xbase++.
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von IngoM »

Hallo Bernd,

ich habe nichts an GETSYS.PRG geändert.
Du hast mir trotzdem einen heißen Tipp gegeben; es waren die CA-Tools!
Viele Grüße
Ingo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von AUGE_OHR »

IngoM hat geschrieben:Gibt es Aussagen von Alaska, dass es hier Fehler gibt?
siehe doch mal in die "Online Knowledge Base" http://www.alaska-software.com/support/kbase-old.cxp

wenn du unter "Volltext Suche" mal
"SET OPTIMIZE","SET RUSHMORE" oder "SET SMARTFILTER" eingibst wirst du einige Treffer finden.

das betrifft nun primär DBFNTX und OEM DBF wo die "Optimierung" manchmal zuviel des Guten ist.
deshalb kann ich beim Umstieg von Cl*pper nach Xbase++ nur dazu raten zunächst solche "Optimierungen" nicht zu verwenden.
IngoM hat geschrieben:es waren die CA-Tools!
das ist natürlich wiedermal ein running Gag ... :lol:
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von IngoM »

Zusammenfassend halte ich die Darstellung des Einfügemodus durch einen geänderten Cursor für sinnvoll.
Schade, dass das hier nicht standardmäßig dabei ist.
Hat jemand diese Funktionalität in seine GETSYS.PRG eingebaut und kann mir damit helfen?
Viele Grüße
Ingo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von AUGE_OHR »

IngoM hat geschrieben:Zusammenfassend halte ich die Darstellung des Einfügemodus durch einen geänderten Cursor für sinnvoll.
Schade, dass das hier nicht standardmäßig dabei ist.
KbdStat() --> nKeyState

Return

Win95 - The function returns always 0 under Windows 95.
WinNT - The insert key is not supported under Windows NT. Scroll-Lock, Caps-Lock and Num-Lock are only detected when the corresponding keyboard mode is enabled.
also geht es "so" nicht.

---

Frage : funktioniert SetTimerEvent() im VIO Modus ?

ich bin mit nicht sicher aber wenn es geht "könnte" man, mit dem von Tom erwähnten AppKeyState(), den Status abfragen.

hm ... aber irgendwie muss ich ja an den xbeK_INS Event was unter Xbase++ mit AppEvent() passiert und dafür benötigt man (mindestens) den Hybrid Modus.

---
IngoM hat geschrieben:Oder gibt es eine mir nicht bekannte Standardlösung?
die Arbeit wirst du wohl selbst machen müssen.
die GetSys.PRG sollte kein Problem sein und der Cl*pper Code für MENU TO sollte auch "passen".
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von IngoM »

Hi Jimmy,

Du überschätzt meine Fähigkeiten; ich habe bisher die Finger von mitgelieferten Dateien gelassen. Es gab ja auch keinen Bedarf.
Wie würdest Du in Textmodus-Anwendungen dafür sorgen, dass der Anwender weiß, ob er im Einfüge- oder Überschreibmodus ist?

Die Belegung der INS-Taste durch diesen Codeblock funktioniert.

Code: Alles auswählen

  #include "Inkey.ch"
  #include "Setcurs.ch"
  #include "appevent.ch"
  * Cursor fr Einfgemodus
  PUBLIC bBlock
  bBlock := {||SetCursor(IIf(ReadInsert(!ReadInsert()),SC_NORMAL,SC_SPECIAL1))}
  SetKey(K_INS,bBlock)
Allerdings bringt ein SET CURSOR OFF mit anschließendem CURSON ON wieder den normalen Unterstrich, auch wenn der Einfügemodus aktiv ist.
Danach habe ich SET CURSOR OFF / On durch eigene Funktionen ersetzt:

Code: Alles auswählen

FUNCTION cursor_off
***********************************************************************
* cursor_off()                                                        *
***********************************************************************
#include "Setcurs.ch"
SETCURSOR(SC_NONE)
RETURN(.T.)

FUNCTION cursor_on
***********************************************************************
* cursor_on()                                                         *
***********************************************************************
#include "Setcurs.ch"
#include "appevent.ch"
IF AppKeyState(xbeK_INS,APPKEY_GET_TOGGLED)<>0
  SETCURSOR(SC_SPECIAL1)
ELSE
  SETCURSOR(SC_NORMAL)
ENDIF
RETURN(.T.)
Das hilft aber auch nicht, beim nächsten GET ist der Cursor ein Unterstrich, obwohl der Einfügemodus aktiv ist.
ich glaube, dass dieser Weg nicht zum Erfolg führen wird.

Es wäre schön, wenn mir jemand mit einer konkreten Lösung helfen könnte.
Viele Grüße
Ingo
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:Frage : funktioniert SetTimerEvent() im VIO Modus ?
ich habe mir noch mal das Beispiel SetTimerEvent() angesehen.
Das läuft ja auch im VIO Modus :o

Code: Alles auswählen

#include "Appevent.ch"

PROCEDURE Main
   LOCAL cVar1:= "Xbase++" , cVar2:="für 32bit"
   CLS

   // Thread benutzen
   SetTimerEvent(100, {|| Statusbar() } )

   @ 10, 0 Say "Variable1" GET cVar1
   @ 12, 0 Say "Variable2" GET cVar2
   READ

   // wichtig vor Ende zurücksetzten !
   SetTimerEvent(0)

RETURN

PROCEDURE Statusbar()
LOCAL nEvent, mp1, mp2, oXbp, i
   // das war original
   DispOutAt(0, 0, Time())

   // erweitert
   nEvent := AppEvent( @mp1, @mp2, @oXbp, 0.5 )
   IF nEvent <> xbe_None
      oXbp:handleEvent( nEvent, mp1, mp2, oXbp )
   ENDIF

   DO CASE
      CASE nEvent == xbeK_INS
         SET( _SET_INSERT, !SET( _SET_INSERT ) )
         IF Set( _SET_INSERT )
            DispOutAt(0, MaxCol()-3, "INS")
         ELSE
            DispOutAt(0, MaxCol()-3, "  ")
         ENDIF
   ENDCASE

RETURN
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von IngoM »

Ich habe leider immer noch keine Lösung für mein Problem gefunden.
Wie sorgt Ihr dafür, dass der Anwender weiß, ob er überschreibt oder einfügt?
Vielleicht gibt es einen anderen Ansatz?
Viele Grüße
Ingo
Benutzeravatar
BJelinek
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 218
Registriert: Sa, 02. Jun 2012 20:57
Wohnort: 73257 Köngen
Hat sich bedankt: 9 Mal
Danksagung erhalten: 3 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von BJelinek »

Hallo Ingo,
auf Grund deine Frage habe ich mir das in meinem Programm mal angeschaut.
Bei mir ist SET SCOREBOARD ON und beim Get sieht man in der ersten Zeile, ob der
Einfüge-Modus aktive ist. Habe jetzt meine GETSYS.PRG angepasst und bei der Eingabe über
GET ändert sich auch der Cursor, jenachdem welcher Cursor in den Einstellungen vom Programm
gewählt wurde. Funktioniert. Mein Menoedit tuts noch nicht.
Hast Du die Maus aktiv ? Ich nicht.
Ich kann die meine GETSYS.PRG zukommen lassen, wenn Du willst.
Bist Du in Willingen ? Dann könnte ich Dir meine Lösung zeigen
Grüße
Bernd

Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von AUGE_OHR »

hi,
IngoM hat geschrieben:Ich habe leider immer noch keine Lösung für mein Problem gefunden.
wie ich festgestellt hatte funktioniert SetTimerEvent() bei GET

mit Verwunderung habe ich nun festgestellt das SetTimerEvent() zwar auch bei MENU TO funktioniert,
die Uhr läuft weiter, aber man bekommt keinen xbeK_INS Event :shock:

ich habe es auch mit

Code: Alles auswählen

   nEvent := LastAppEvent( @mp1, @mp2, @oXbp)
versucht aber auch dort kommt kein xbeK_INS Event (vielleicht irgend eine andere Konstante oder anderer Thread)

auf Cl*pper Ebene gibt es also nur den einen Weg

Code: Alles auswählen

#command  MENU TO <var> ;
      =>  <var> := MyMenuTo(promptList, <var>, UPPER(#<var>))
und eine eigene Function MyMenuTo() nach Vorlage der Demo Source die upgeloadet habe.
IngoM hat geschrieben:Vielleicht gibt es einen anderen Ansatz?
wenn KbdStat() von Alaskas XbTools nicht unterstützt wird hat das wohl schon einen Grund.
gruss by OHR
Jimmy
IngoM
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 09. Jul 2013 9:23

Re: Tastenzustand EINFG/NUMLOCK anzeigen

Beitrag von IngoM »

Hallo Bernd,

vielen Dank für Dein Angebot; leider bin ich nicht in Willingen. Könntest Du mir Deine GETSYS per PN schicken?
Die Maus ist bei mir auch nicht aktiv. MEMOEDIT benutze ich in diesem Programm ebenfalls nicht.

Bei mir ist SCOREBOARD OFF, da in Zeile 0, und um den ganzen Bildschirm herum, ein Rahmen ist.
Ich könnte mir vorstellen, SCOREBOARD einzuschalten, müsste dann aber die Stelle wissen, an der ich den unter der Anzeige von SCOREBOARD liegenden Rahmen rekonstruieren kann. Weißt Du, wo das programmiert ist?
Viele Grüße
Ingo
Antworten