Autor Thema: Wie kann ich das Cancel-Event ( X neben dem Fensternamen) abfangen??  (Gelesen 1873 mal)

Offline kai.71

  • Frischling
  • *
  • Beiträge: 5
Hallo ;)

Ich bin auf der Suche nach einer Möglichkeit, das Cancel-Event (also das X neben dem Fensternamen) abzufangen.
Ich habe etwas gefunden, um das Escape abzufangen/ zu verhindern, aber, wie gesagt, nichts für das Cancel-Event.
Hat da vlt jemand eine Lösung zur Hand?
Eine Lösung im Query-Close bzw. Query-Save ist nicht möglich, da ich dort schon einige andere Sachen abfange.

Hier für das Abfangen des Escape:

Type KeyboardBytes
kbByte(0 To 255) As Long
End Type
Declare Function GetKeyState Lib "user32" (Byval nVirtKey As Long) As Long
Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Dim kbArray As KeyboardBytes, kbOld As KeyboardBytes

Sub ESC_Taste_aus
'********************************************
'- der Code hier verhindert das schliessen des Fensters durch Esc unter bestimmten umständen
If GetKeyState(VK_ESC) Then
'Get the keyboard state
GetKeyboardState kbArray
'Change a key
kbArray.kbByte(VK_ESC) = 1
'Set the keyboard state
SetKeyboardState kbArray
SetKeyboardState kbOld
continue = False
End If
'********************************************
End Sub

Sub ESC_Taste_ein
SetKeyboardState kbOld
End Sub

Gibt es sowas auch für das Cancel-Event???

Vielen Dank
Kai


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Was soll denn das werden. Wo willst du denn auf Cancel abfragen?

Ein paar mehr Infos wären nicht schlecht.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline kai.71

  • Frischling
  • *
  • Beiträge: 5
OK..sorry.... ;)

also, das ist eine maske, in der der nutzer aus einer adressdatenbank eine lono-adresse auswählen kann, welche für den zugriff (ACL) auf eine andere datenbank benötigt wird.
innerhalb dieser maske existieren 2 buttons:
1) speichern & schliessen (also save und close)
2) abbrechen
wenn der nutzer abbrechen betätigt, wird ein item im dokument erzeugt, gespeichert, und der editmode auf false gesetzt.

im queryclose wird dann überprüft, ob dieses feld vorhanden ist, und wenn ja, dann wird dieses dokument gelöscht.

wenn der nutzer jetzt das kreuz betätigt, wird natürlich nicht das item erzeugt, und das dokument dann im queryclose nicht mehr gelöscht.
deswegen möchte ich das cancel-event generell abschalten, also wie bei vb (onclose......cancel=true).

ich hoffe das ist jetzt ausführlicher ;)

danke

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Ich gehe mal davon aus, dass du die Maske als Dialogbox aufrufst. In diesem Fall kannst du im QueryClose-Event mit notesUIDocument.DialogBoxCanceled prüfen ob die Dialogbox mit Cancel (auf mit dem X) verlassen wurde.


Beispiel aus der Hilfe:

(Globals)(Declarations)
%INCLUDE "lsconst.lss"

Sub Queryclose(Source As NotesUIDocument, Continue As Variant)
  If Source.DialogBoxCanceled Then
    If Messagebox ("Do you really want to Cancel", _
    MB_YESNO+MB_ICONQUESTION, "Cancel") = IDNO Then
      Continue = False
    End If
  End If   
End Sub

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline kai.71

  • Frischling
  • *
  • Beiträge: 5
danke, :)
 aber ich rufe die maske nicht in einer dialogbox auf.
hatte an diese möglichkeit auch schon gedacht, nachdem ich das in der hilfe gefunden habe. dann müsste ich aber alles umstricken :-(
war ja bisher der meinung, das ich das cancel-event über ne api abfangen kann, oder so.
werde mal parallel mit dem umbau auf dialogbox beginnen, bevor ich nachher gar keine lösung habe.

gruss kai

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
erklär doch noch mal was Du willst: soll der User das "x" drücken können oder nicht ?

Wie darf der User denn das Dokument schliessen ? Nur über die beiden Buttons ?

Wenn die Antwort auf die zweite Frage "ja" heisst, dann ist es ja ganz einfach: wann immer das Flag NICHT gesetzt ist, dann löschst Du in Deinem QueryClose.

Wenn "x" <> Esc reagieren soll, dann ist das
a) nicht abzufangen
und
b) eine inkonsistente Bedienung, die den Benutzer nur verwirrt, weil Esc IMMER dem x entspricht...

Gruß
Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline kai.71

  • Frischling
  • *
  • Beiträge: 5
guten morgen ;)

also, ich möchte das schliessen über escape oder das kreuz ausschalten.
nicht mehr und nicht weniger ;)

aber der hinweis mit dem flag (den lösungsansatz hatte ich bereits verfolgt) hat mich nochmal zum nachdenken angeregt.
manchmal braucht man halt einen schubs in die richtige richtung, dafür danke :o))

wäre aber trotzdem für eine lösung zu meiner frage dankbar ;)

gruss kai

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
das geht NUR über QueryClose. WenN Du dort schon code drin hast, dann musst Du den eben so erweitern, dass er das tut.

Den Ansatz hast Du ja schon: Schliessen- Button: Flag setzen und dann schliessen, im Queryclose auf das Flag abfragen. Dieses wird schliesslich vom "x" und durch "Esc" nicht gesetzt.

Eine andere Möglichkeit gibt es nicht.

Gruß
Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline kai.71

  • Frischling
  • *
  • Beiträge: 5
erstmal vielen dank für die hilfe  :D

aber wenn es so etwas für esc gibt, dann müsste es doch auch eine api oder so für das X geben? vermute ich zumindest mal ;)

gruss kai

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
API kann und sollte der letzte Strohhalm sein, woran man sich klammert.

Warum willst Du das unbedingt mit API lösen, wenn es doch Standard- Möglichkeiten gibt ?

sicherlich gibt es einen API- Call, der das klicken des Kreuzchens verhindert, aber ich frage nochmal: WARUM !?

Halte Dich an Standards, dann bleibt das Ding auch für andere und Dich selbst wartbar....

Tode
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz