Domino 9 und frühere Versionen > ND7: Entwicklung

Bei Enter eine Funktion ausführen

<< < (2/3) > >>

botschi:
Sowas wurde bei uns eigentlich immer abgelehnt, weil Notes kein Tastaturtreiber ist und auch keiner sein soll...  ;D

Der Aufwand rechtfertigt den Nutzen in den seltensten Fällen.

Matthias

Demian:
naja, aber API-Funktionen wie Blockinput und dergleichen sind nicht sonderlich aufwendig aber äußerst praktisch, z.B. bei automatischer Brieferstellung.

edit:
Also, ich wollte eben eine gefundene API umsetzen und musste mit Entsetzen feststellen, dass das onchange-Ereignis nicht bei jeder Änderung des Feldes sondern erst nach Änderung + Verlassen des Feldes ausgeführt wird. LAut Hilfe soll das auch noch so sein...  ::)

In Office wird das change-Ereignis für Felder bei jeder Änderung innerhalb des Feldes ausgeführt, was meines Erachtens auch Sinn macht. Dann funktioniert folgender Code:


--- Code: ---'Deklarationen-Teil des Feldes
Public Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Public Declare Function GetAsyncKeyState Lib "user32.dll" ( ByVal vKey As Long) As Integer

'Abzufragende Taste
Public Const Enter As Long = "13"

'Change-Ereignis des Feldes
If CBool(GetAsyncKeyState(Enter) And &H8000) Then MsgBox ("Die Enter-Taste wurde gedrückt.")
--- Ende Code ---

Aber ohne das passende Ereignis in Notes wirds schwierig...

Gruß
Demian

rar:
Vielen Dank für eure Mühen.
Langsam glaube ich auch nicht mehr, dass es irgendwie geht.
Es wird echt darauf raus laufen, dass ich das Feld lösche und mit einer Inputbox arbeite.

lG
-Daniel

it898ur:
Hallo,

die Quelle kann ich nicht mehr nennen, aber mir ist mal dieser Code über den Weg gelaufen:

' Der Code basiert auf einer Mischung aus JavaScript und LotusScript

' Im Ereignis 'JS-Kopfzeilen' ==> es wird immer das erste Feld geprüft:
        var newline = String.fromCharCode(10);
        var activ;

        function myalert()
             {
                if (document.forms[0].Input.value.indexOf(newline)>=0)
                {
                    document.forms[0].SaveOptions="0";
                    window.clearInterval(activ);
          window.close();
                }
            }

' Im Ereignis 'OnLoad':
                 activ = window.setInterval("myalert()",1);

' Im Ereignis 'OnUnload':
                 window.clearInterval(activ);

' Im Ereignis 'QueryClose':
   If source.fieldgettext("Feldname") <> "" Then
      Msgbox "Hier kommt der Code"
      continue = False
   End If

Das sollte funktionieren, wenn das Suchfeld in einer eigenen Maske im Frameset gezeigt wird. Der Suchcode muss dann in das Ereignis "QueryClose" (da das JS die Maske schließt, wenn ein Enter eingegeben wird).

Funktioniert allerdings nur wen JavaScript im Notes-Client aktiviert ist (aber wer deaktiviert das schon ?)

Gruß

André

jo@chim:
Ah ja, das hab ich auch schon gesehen. Ich habe mal daraus einen "LS-per-Javascript-Enter-Starter" gebastelt, der das Problem lösen dürfte:

Im JS-Header der Maske:

--- Code: ---var newline = String.fromCharCode(10);
var ssactive;
var fname = new Array( "fldSuche");
var fnum = 0;
var fcount = fname.length - 1;

function StartScriptOnEnter() {
if (document.forms[0][fname[fnum]].value.indexOf(newline)>=0) {
document.forms[0][fname[fnum]].value = document.forms[0][fname[fnum]].value.replace(String.fromCharCode(10), '');
fnum = (fnum >= fcount) ? 0 : (fnum + 1);
document.forms[0][fname[fnum]].focus();
document.forms[0].ScriptStarterButton.click();
}
}

--- Ende Code ---

Im OnLoad:

--- Code: ---ssactive = window.setInterval("StartScriptOnEnter()",1);
--- Ende Code ---

Im OnUnload:

--- Code: ---window.clearInterval(ssactive);
--- Ende Code ---

Das Eingabefeld in der Maske (Javascript muss natürlich aktiviert sein) heisst im gegebenen Fall fldSuche.

Desweiteren brauchts noch einen Button namens ScriptStarterButton irgendwo im Dokument (kann man auch verstecken). Mit dem Namen ist nicht  die Beschriftung des Buttons, sondern dessen HTML-Name (in den HTML-Eigenschaften) gemeint.

In den Button kann man beliebigen LS- oder Formel-Code setzen und durch Betätigung der Eingabetaste starten, wenn das Feld "fldSuche" den Fokus hat.

(only short tested no warranty undsoweiter  ;))

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln