Autor Thema: inviewedit und zwischenablage  (Gelesen 2705 mal)

Offline mleussner

  • Frischling
  • *
  • Beiträge: 26
  • Geschlecht: Männlich
  • Gegenseitige Hilfe macht selbst arme Leute reich.
inviewedit und zwischenablage
« am: 26.08.09 - 13:42:35 »
 ???

Hallo zusammen,

ich plage mich mit folgendem Problem herum. In einer Ansicht sollen Werte direkt in den Spalten eingegeben werden. Dabei sind auch einige längere Textpassagen einzugeben.

Wenn ich nun die Standardmöglichkeiten benutze, erhalte ich eine einzeilige Eingabemöglichkeit, bei der ich nicht sehen kann, an welcher Stelle des Textes ich mich befinde.

Jetzt habe ich mir überlegt per "Keybd_Event" Werte über die Zwischenablage in die Spalte zu übertragen.

Ich lasse mir also eine Maske mit einem Eingabefeld anzeigen, das aus der Zwischenablage den zuvor dort reinkopierten Text anzeigt.

Im QueryClose der Maske füge ich den neuen Text in die Zwischenablage wieder ein.

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   Dim tmp As String
   tmp = source.FieldGetText("Thema")
   setClipboardText(tmp)
End Sub   

Das funktioniert anscheinend nicht.

Dann läuft das script aus dem InViewEdit weiter und soll die Werte aus der Zwischenablage wieder in das Feld einfügen.

      Select Case Colprogname(0)
      Case "Status"
         choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Select the answer","",status)
         setClipboardText(choice )
         KeyPress VK_CONTROL, 0, 0, 0
         KeyPress VK_V, 0, 0, 0
         KeyPress VK_CONTROL, 0, 2, 0
         KeyPress VK_V, 0, 2, 0


Das funktioniert, solange weniger als 256 Zeichen in der Maske eingetragen wurden.
Bei mehr Zeichen ertönt nur ein klägliches Piepen und der Text ist weg.

Was mache ich falsch und wer kann mir helfen??
Ein gutes Gedächtnis ist nicht so gut wie ein bisschen Tinte.

SunOS 5.10 & Server 2003
Release 8.5.2FP2HF232
Notes Release 8.5.2FP2

Offline mleussner

  • Frischling
  • *
  • Beiträge: 26
  • Geschlecht: Männlich
  • Gegenseitige Hilfe macht selbst arme Leute reich.
Re: inviewedit und zwischenablage
« Antwort #1 am: 01.09.09 - 08:44:44 »
Ich habe mir jetzt damit geholfen, daß ich ein Feld in einem neuen Dokument, das ich mit einer eigenen Maske öffne, einen Wert übergebe. Das klappt ganz prima.
Leider kommt zwischendurch immer mal wieder ein kleines hässliches Fenster ("Operation wurde auf ihre Anforderung hin gestoppt.") mit einer Abbruchmeldung, die ich nicht wegbekomme. Das passiert, wenn ich aus einer Spalte per TAB in die nächste springe, in der eine Maske zum Editieren benutzt wird.



Case "Thema"      
         Dim auswahl As New NotesDocument(db)
         auswahl.Thema = doc.thema(0)
         If ws.DialogBox("Thema",True,True,False,False,False,False,"Text eingeben",auswahl) Then
            wahl = auswahl.Thema
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False

Hat jemand eine Idee? Sonst muß ich meinem Kunden klarmachen, daß Notes nicht Excel ist. Das würde mich allerdings sehr ärgern.
Ein gutes Gedächtnis ist nicht so gut wie ein bisschen Tinte.

SunOS 5.10 & Server 2003
Release 8.5.2FP2HF232
Notes Release 8.5.2FP2

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: inviewedit und zwischenablage
« Antwort #2 am: 02.09.09 - 18:51:19 »
... dein Code-Snippet brint mir hier nicht so richtig was - ich mache das auch mit der Dialogmaske, habe aber keine Abbruchmeldungen. Dein Konstrukt seint mir irgendwie daran schuld zu sein.

Wo hast du den Code-Auschnitt denn drin?

Toni
Grüßle Toni :)

Offline mleussner

  • Frischling
  • *
  • Beiträge: 26
  • Geschlecht: Männlich
  • Gegenseitige Hilfe macht selbst arme Leute reich.
Re: inviewedit und zwischenablage
« Antwort #3 am: 03.09.09 - 07:23:25 »
Das kann ich gerne aufklären. Hier kommt der komplette Code:

Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)
   
   Const QUERY_REQUEST = 1
   Const VALIDATE_REQUEST = 2
   Const SAVE_REQUEST = 3
   Const NEWENTRY_REQUEST = 4
   Const KEYEVENTF_KEYUP = &H2
   Const KEYEVENTF_KEYDOWN =  &H0
   Const VK_CONTROL = &H11
   Const VK_C = &H43
   Const VK_V = &H56
   Const VK_TAB = &H9
   Const VK_UP = &H26
   Const VK_DOWN = &H28
   
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim caret As String
   Dim msg As String
   Dim flag As Boolean
   Dim ret As Boolean
   Dim values() As String
   Dim i As Integer
   Dim j As Integer
   Dim max As Integer
   Dim   newval As String
   
   caret = Source.CaretNoteID
   If caret = "0" Then Exit Sub        
   
   Set db = Source.View.Parent
   Set doc = db.GetDocumentByID(caret)
   Dim auswahl As New NotesDocument(db)
   
   Dim Status(18) As String
   Status(0) = "Offen"
   Status(1) = "neu eingestellt"
   Status(2) = "In Arbeit"
   Status(3) = "Fertig zur Vorlage im UAK-DMS"
   Status(4) = "Abstimmung im UAK-DMS erfolgt"
   Status(5) = "Aufnahme in Releaseplanung"
   Status(6) = "Zur Aufwandsschätzung"
   Status(7) = "Fertig zur Vorlage im FAK-BO"
   Status(8) = "Beauftragung durch FAK-BO zugestimmt"
   Status(9) = "In Realisierung"
   Status(10) = "Abnahme durch FAK-BO erfolgt"
   Status(11) = "In Prüfung durch ivv"
   Status(12) = "Bereit zum Test"
   Status(13) = "Freigabe für Produktion"
   Status(14) = "Zurückgestellt"
   Status(15) = "iAK Anforderung"
   Status(16) = "Sammlung eAK-Release"
   Status(17) = "Geschlossen"
   
   Dim systeme(4) As String
   Systeme(0)="Scanning"
   Systeme(1)="eGVR"
   Systeme(2)="Arbeitskorb"
   Systeme(3)="Sonstiges"
   
   
   Select Case Requesttype
   Case QUERY_REQUEST
      
      Select Case Colprogname(0)
      Case "Status"
         choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Select the answer","",status)
         setClipboardText(choice )
         KeyPress VK_CONTROL, 0, 0, 0
         KeyPress VK_V, 0, 0, 0
         KeyPress VK_CONTROL, 0, 2, 0
         KeyPress VK_V, 0, 2, 0
      Case "System_Komponente"
         choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Bitte Auswahl treffen","",systeme)
         setClipboardText(choice )
         KeyPress VK_CONTROL, 0, 0, 0
         KeyPress VK_V, 0, 0, 0
         KeyPress VK_CONTROL, 0, 2, 0
         KeyPress VK_V, 0, 2, 0
         continue = False
      Case "Thema"      
         auswahl.Thema = doc.thema(0)
         If ws.DialogBox("Thema",True,True,False,False,False,False,"Text eingeben",auswahl) Then
            wahl = auswahl.Thema
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      Case "Historie_Bemerkung"      
         auswahl.Historie_Bemerkung = doc.Historie_Bemerkung(0)
         If ws.DialogBox("Historie_Bemerkung",True,True,False,False,False,False,"Text eingeben",auswahl) Then
            wahl = auswahl.Historie_Bemerkung
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      Case "letzte_Änderung"      
         auswahl.Date = doc.letzte_Änderung
         If  ws.DialogBox("DP",True,True,False,False,False,False,"Datum letzte Änderung auswählen",auswahl,True , False , False ) Then
            wahl = auswahl.Date
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      Case "Datum_Bereitstellung"
         auswahl.Date = doc.Datum_Bereitstellung
         If ws.DialogBox("DP",True,True,False,False,False,False,"Datum Bereitstellung auswählen",auswahl,True , False , False )  Then
            wahl = auswahl.Date
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      Case "Kundentest_erfolgt_am"
         auswahl.Date = doc.Kundentest_erfolgt_am
         If ws.DialogBox("DP",True,True,False,False,False,False,"Kundentest-Datum auswählen",auswahl,True , False , False ) Then
            wahl = auswahl.Date
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      Case "eingestellt_am"   
         auswahl.Date = doc.eingestellt_am
         If ws.DialogBox("DP",True,True,False,False,False,False,"eingestellt am - Datum auswählen",auswahl,True , False , False ) Then
            wahl = auswahl.Date
            Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
         End If
         continue = False
         
      End Select
      
   Case VALIDATE_REQUEST
      Select Case Colprogname(0)
      Case "Status"
         If Fulltrim(Columnvalue(0)) = "" Then
            Messagebox "Bitte einen Wert eintragen",, "Kein Wert in Spalte"
            Continue = False
         End If
         flag = False
         Forall element In status
            If Lcase(element) = Lcase(Columnvalue(0)) Then
               flag = True
               Exit Forall
            End If
         End Forall
         If Not flag Then
            Forall element In status
               msg = msg & element & Chr(10)
            End Forall
            Messagebox msg,, "Wert muß einem der folgenden entsprechen."
            continue = False
         End If
      Case "Kategorie"
         If Fulltrim(Columnvalue(0)) = "" Then
            Messagebox "Bitte einen Wert eintragen",, "Kein Wert in Spalte"
            Continue = False
         End If
      Case Else
         flag = True
      End Select      
   Case SAVE_REQUEST
      For i = 0 To Ubound(Colprogname) Step 1
         Call doc.ReplaceItemValue(Colprogname(i), Columnvalue(i))
      Next
      Call doc.Save(True, True, True)
      Call ws.viewrefresh()      
      
   Case NEWENTRY_REQUEST
      Set doc = New NotesDocument(db)
      Call doc.ReplaceItemValue("Form", "MainDocument")
      For i = 0 To Ubound(Colprogname) Step 1
         Call doc.ReplaceItemValue(Colprogname(i), Columnvalue(i))
      Next
      
      Call doc.Save(True, True, True)
      Call ws.viewrefresh()      
      
   End Select
   
End Sub

Ich hoffe, das bringt Licht ins Dunkel. Danke schon mal für dein Interesse.
Martin
Ein gutes Gedächtnis ist nicht so gut wie ein bisschen Tinte.

SunOS 5.10 & Server 2003
Release 8.5.2FP2HF232
Notes Release 8.5.2FP2

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: inviewedit und zwischenablage
« Antwort #4 am: 03.09.09 - 18:34:29 »
... mächtig mächtig - das ist mehr als benötigt - das Grundkonstrukt hätte mir gereicht...

Den Code werde ich mir später genauer anschauen, könnte an dem erneuten Aufruf InViewEdit liegen - da brauche ich etwas mehr Zeit - Essen steht gleich auf dem Tisch...

Bis dann..

Toni
« Letzte Änderung: 03.09.09 - 18:37:53 von ata »
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz