Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: botschi am 21.11.06 - 09:28:25

Titel: Dialogbox ohne 'X'
Beitrag von: botschi am 21.11.06 - 09:28:25
Hallo liebe Leute,

ich nutze eine Dialogbox mit folgendem Aufruf:

dialogbox = ws.Dialogbox("dialogzuweisen",True,True,True,False,False,False,"Ticket zuweisen", dlg, True, True)

Kann man der Dialogbox irgendwie sagen, dass sie oben rechts kein 'X' haben soll?

Also ich möchte erreichen, dass man einen meiner Knöpfe drücken muss, um das Fenster wieder zu schliessen.
Kann mir da jemand helfen?
Titel: Re: Dialogbox ohne Kreuz
Beitrag von: koehlerbv am 21.11.06 - 09:37:14
Verstehe ich nicht: Warum willst Du den Windows-Standard brechen, wenn Du doch auf "Abbruch durch User" sowieso reagieren musst?

Um das Kreuz wegzubekommen, müsstest Du Dich auch an ein MS-Forum wenden, dann die Dialogbox-Funktionalität kommt direkt aus den Tiefen des Betriebssystems. Notes macht da nur einen API-Call.  ;)

Bernhard
Titel: Re: Dialogbox ohne Kreuz
Beitrag von: botschi am 21.11.06 - 09:43:52
Ich habe eine Dialogbox, mit einigen Knöpfen, u.a. ein 'Abbrechen'.
Leider verhalten sich der Knopf und das 'X' unterschiedlich  :-\

Das muss natürlich an meinem Code liegen...
Wenn ich das 'X' betätige, dann geht nicht nur die Dialogbox zu, sondern das darunter liegende Doc schliesst sich auch. Man bekommt für das darunter liegende also die Frage 'Wollen Sie speichern?".

Ich finde dafür keinen Hebel und wollte deswegen das 'X' entfernen... Kein guter Ansatz, ich weiss...

In meinem Knopf habe ich folgende Formeln:
@SetField("abbruch";"abbruch");
@Command([FileCloseWindow])
Titel: Re: Dialogbox ohne Kreuz
Beitrag von: koehlerbv am 21.11.06 - 09:49:26
Du musst den Return Value von Dialogbox auswerten, dann weisst Du auch, was der User gemacht hat und kannst reagieren.
In der Beschreibung hast Du übrigens genau umgedreht erklärt  als das, was Du wirklich tust.

Bernhard
Titel: Re: Dialogbox ohne Kreuz
Beitrag von: botschi am 21.11.06 - 09:53:24
In der Beschreibung hast Du übrigens genau umgedreht erklärt  als das, was Du wirklich tust.

Was meinst Du genau?
Titel: Re: Dialogbox ohne Kreuz
Beitrag von: botschi am 21.11.06 - 09:56:41
Wenn ich in der Box meine eigenen Knöpfe habe, also diesen Parameter auf 'True' setze:

noOkCancel
Hinweis  This parameter is new with Release 5.
Boolean. Optional. Specify True to not display the OK button.

Wie kann ich denn den Rückgabewert bestimmen? Der ist bei mir immer 'True', auch wenn ich meinen 'Abbrechen'-Knopf drücke, obwohl ich diesen als 'Abbrechen' definiert habe  ???
Titel: Re: Dialogbox ohne 'X'
Beitrag von: koehlerbv am 21.11.06 - 18:50:33
Deinene Buttons müssen entweder alle Aktionen bereits selber abschliessen (keine weitere Behandlung im weiteren Code) oder Du musst einen Rückgabecode vereinbaren und global hinterlegen. Das Verfahren ist also anders als mit der "normalen" Dialogbox.

Bernhard
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 22.11.06 - 11:16:11
Hallo,

du könntest das vielleicht auch in einer do while-Schleife lösen.

In etwa so:

do while Dialogbox = ""
dialogbox = work.prompt....
loop

Dann wird bei Drücken auf x Die Dialogbox erneut angezeigt, und zwar solange, bis der Rückgabewert nicht mehr "" ist.

Gruß
Demian
Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 22.11.06 - 11:42:18
Oha.
Hab ich noch nicht probiert, aber hört sich interessant an. Daran hab ich noch gar nicht gedacht.

Danke dafür!
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 07:40:13
Mir fällt gerade auf, ich habe da was verwechselt. Die Dialogbox gibt nicht "" zurück sondern false. Habe es mit workspace.prompt verwechselt (siehe Code oben).

Also statt "" müsstest du false einsetzen.

Gruß
Demian



Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 23.11.06 - 09:33:05
Ich habs jetzt noch nicht probiert, aber mein Problem ist ja, dass ich nie ein false bekomme.
Wie Bernhard sagte, ich muss wohl einen Rückgabecode vereinbaren.

Es sind jetzt andere Sachen dazwischen gekommen, aber da muss ich auch nochmal ran!
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 10:06:10
Hallo Botschi,

habe jetzt mal deinen Code genommen (bis auf das Dokument dlg)

Dim work As New NotesUIWorkspace
Dim a As Variant
   
Do While a = False
a = work.DialogBox("Test",True,True,True,False,False,False,"Ticket zuweisen", , True, True)
Msgbox a
Loop   


Bei Klicken auf X gibt er mir false zurück und ruft die Box erneut auf. Das das jetzt nur mit dem angegebenen Dokument zusammenhängt, kann ich mir eigentlich nicht vorstellen.

Gruß
Demian
Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 23.11.06 - 10:36:42
Ich nicht, ich kriege trotzdem immer ein true. Auch wenn ich Deinen Code nutze.
Do While dialogbox = False
      dialogbox = ws.Dialogbox("dialogzuweisen",True,True,True,False,False,False,"Ticket zuweisen", dlg, True, True)
   Loop   
Unsere Masken unterscheiden sich vielleicht... Wo kann denn noch der Unterschied liegen?
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 10:49:10
und wenn du mal die Maske dlg weglässt?
Wie gesagt, habe diesen Parameter ja offen gelassen und bei mir kommt false. Also kann es eigentlich nur daran liegen.
Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 23.11.06 - 11:00:19
Dann bekomme ich ein:
"DialogBox kann in diesem Kontext nicht verwendet werden. Es muss ein Dokument ausgewählt werden."
Ich dachte auch das Doc ist optional...  ???

Vielleicht nochmal kurz zum Aufruf:
Ich habe eine Ticketmaske. Will ich das Ticket jemandem zuweisen, drücke ich auf einen Knopf und dann soll die Dialogbox aufgehen.
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 11:39:31
OK,ich hatte den Code innerhalbs einer geöffneten Maske ausgeführt, sonst kommt die Meldung mit dem Kontext.

Ist diese Ticketmaske geöffnet?
Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 23.11.06 - 11:42:58
Ja, zuweisen geht nur über das Ticket, welches im Bearbeitungsmodus ist
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 11:50:13
Dann verstehe ich das mit der Kontextmeldung nicht. Die kam bei mir auch, als ich den Code aus einer Ansicht heraus starten wollte, weil ich nicht dran gedacht habe.

Kannst du die .ntf hochladen?
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Tode am 23.11.06 - 12:01:26
auch wenn ich jetzt alles über den Haufen werfe, was hier bisher diskutiert wurde, aber ist die While- Schleife nicht in Wirklichkeit zu spät ?

Ich würde es so lösen, dass sich die Dialogbox beim Klick auf das X schlicht und ergreifend nicht schliesst.

Das ist ganz einfach...

Dein OK- Button / Dein Abbrechen- Button:
irgendwo in die Formel ein @Environment( "Knopf_Gedrueckt" ; "1" ) (oder ses.SetEnvironmentVar( ) in Script.

Dann im QueryClose der Dialog- Maske:
Dim ses as New NotesSession
Dim cont as String
cont = ses.GetEnvironmentString( "Knopf_Gedrueckt" )
call ses.SetEnvironmentVar( "Knopf_Gedrueckt" , "" )
if cont <> "1" then
continue = False
end if

und aus die Maus: die Maske lässt sich nur noch über die Buttons schliessen, das "x" hat keinerlei Auswirkungen mehr (genausowenig wie die Taste Esc übrigens, das wäre nämlich das nächste gewesen, wenn Du es geschafft hättest, das x auszublenden...)

HTH
Tode
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Demian am 23.11.06 - 12:08:15
Hallo Tode,

inwiefern ist die Schleife zu spät? Also, bei mir funzt. Die Dialogbox flackert kurz und ist wieder da.

Gruß
Demian
Titel: Re: Dialogbox ohne 'X'
Beitrag von: jagger am 23.11.06 - 12:39:09
Hi,

eine weitere Möglichkeit wäre das Auswerten der "DialogBoxCanceled" Eigenschaft des UiDocuments.
Wobei Du dann auch sicherstellen musst, dass einer Deiner Buttons vom Typ "OK" die Dialogbox wirklich schließt.

Im QueryClose der DialogMaske:

   If source.DialogBoxCanceled Then
      Msgbox |Bitte schließen Sie den Dialog über "OK" ab|
      continue = False
   End If
Titel: Re: Dialogbox ohne 'X'
Beitrag von: botschi am 23.11.06 - 12:58:16
Ich komm ja fast nicht hinterher  :D

Das mit "DialogBoxCanceled" finde ich noch besser, als über die Umgebungsvariable.
Ich habe zwar schon mit der Umgebungsvariable gearbeitet, aber mir fehlt da noch ein wenig Erfahrung, was schief gehen KÖNNTE oder in welche Messer ich laufen könnte. Was sind da die Nachteile, mir fallen keine WIRKLICHEN Nachteile ein...?

Ich habe in der Dialogbox insgesamt 3 Knöpfe, wobei einer ein OK-Knopf ist und der schließt die Box auch.

Das werde ich jedenfalls beides mal einbauen!
Vielen Dank erstmal dafür.
Titel: Re: Dialogbox ohne 'X'
Beitrag von: Tode am 27.11.06 - 22:07:15
ja, aber Du machst die Dialogbox zu und wieder auf. Daher das flackern...
Du behebst also nicht den "Eingabefehler" (x gedrückt oder Esc), sondern die Auswirkung.

Ich persönlich behebe den Fehler lieber dort wo er passiert...

Nur gesetzt den Fall, du möchtest die Dialogbox jetzt auch aus einem Formel- Agenten aufrufen könenn, dann musst Du Dir hier wieder einen eigenen Mechanismus zum Re-Open ausdenken und den implementieren.

Oder anders gesagt: Wo auch immer im Code du die Dialogbox aufrufen willst, musst Du wieder die "Widerholbedingung" mitprogrammieren.

Wenn das schliessen des Dialogs aber schon dort verhindert wird, wo es nicht passieren soll, dann musst Du Dir beim Aufruf wenigstens darüber keine Sorge mehr machen...

mal ganz abgesehen von der Möglichkeit, dass bei Deiner Lösung Eingaben verloren gehen können und Berechnungen (z.B. berechnet zur Anzeige Felder mit Lookups) bei jedem reopen aufs neue gemacht werden....

Aber es ist natürlich jedem selbst überlassen, wie man das implementiert...

Ich machs halt so wie beschrieben...

Gruß
Tode