SoftMaker.de

Deutschsprachiges Diskussionsforum
Aktuelle Zeit: 19.06.2013 05:27:58

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 31.08.2008 22:26:32 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Eine MsgBox in der Dialogfunktion kann eine Endlosschleife erzeugen
Die Msgbox darf nicht beim Ereignis Action% = 4 (Focus wechselt Objekt) aufgerufen werden.
Jedesmal nach Beenden der MsBox geht der Focus an den Dialog zurück und ruft die MsgBox erneut auf.
Mit etas Glück endet nach ca. 50x [Enter] tippen das Macro mit einer unsinnigen Fehlermeldung. Ich musste aber auch schon alles killen und rebooten wegen nicht freigegebenem Arbeitsspeicher. Vorsicht, der Dialog ist dabei nicht mehr Applikationsmodal! (Vorteil, man kann noch schnell speichern :) )

Skript zur Analyse der Dialog Ereignisse, Funktionsparameter, Elementvariablen, und des Rückgabewerts
So, und weil ich aus der Beschreibung zu Dialogen, den Elementen und der Dialogfunktion überhaupt nicht schlau wurde aus den möglichen Rückgabewerten, hab ich mal ein Skript geschrieben.
Es printet im Ausgabefenster...
  • den Rückgabewert des Dialogs (ButtonNum)
  • alle Werte der Elementvariablen (ausser Textfeld, Gruppenrahmen) nach Dialogende.
  • alle Übergabeparameter der Dialogfunktion während des Betriebs, bei uns noch wohl eher unbekannten Ereignissen (Actions).
Vor allem Letzteres ist interessant. Zieht mal den Dialog über'n Bildschirm! Oder: [Abbruch] heißt "Picture", [OK] "OptionButton" :mrgreen: , und alle Radiobuttons geben -1, 0 oder Buttonnumber zurück, je nachdem ob OK, Cancel oder eine andere Schaltfläche geklickt wurde (Optiongroup gibt Status wieder, nicht die Radiobuttons).

Die daraus ersehbaren Ergebnisse werden sicher noch irgendwann in die Hilfe kommen denke ich. Bis dahin müsste jeder mit dem Skript seine möglichen Rückgabewerte ohne Probiererei genau ermitteln können, und erkennen bei welcher Äkschen-Id was geschehen war usw..

Und ich bitte um ein Picture Element!
Ein echtes, nicht [Abbrechen] ;) ,denn vieles lässt sich mit Text allein sehr schwer vermitteln. Mehr folgt in menschlichem Abstand :)

Das Skript: (UTF-8 codiert speichern wg. Umlauten!)
Code:
Sub DialogInfo ()

' Macro zum Betrachten des Rückgabewerts von Dialogen,
' der Elementvariablen, und der während des Betriebs an die
' Dialogfunktion übergeben Parameter wenn sie durch ein
' Ereignis (Action%) aufgerufen wird.
' Das Macro läuft sinnvoll nur im BasicMaker (Ausgabefenster!).

' Die Kommentarzeilen zwischen "*******" sind zu löschen!
' Bei Aktivierung demonstrieren sie eine Endlosschleife.
' Die Print Anweisung ist hier sowieso perfekt geeignet.

   Dim cnt%
   Dim myList$(10)

   For Cnt = 1 To 10
      myList(Cnt) = "ListRow " & CStr(Cnt)
   Next Cnt

   Begin Dialog TestDialog 137,79, 240, 132, "Test Dialog", .CtrlDlgTest
      Text 8,8,192,12, "Rückgabewert, Elementvariablen, und Parameter der Dialogfunktion testen"
      GroupBox 8,24,64,44, "GroupBox_1"
      OptionGroup .GROUP_1
         OptionButton 16,32,52,16, "RadioButton_1", .Radio_1
         OptionButton 16,48,52,16, "RadioButton_2", .Radio_2
      CheckBox 16,76,48,12, "CheckBox_1", .Check_1
      CheckBox 16,92,48,12, "CheckBox_2", .Check_2
      TextBox 88,28,56,12, "EditBox_1", .Edit_1
      ListBox 88,52,56,44, myList(), .List_1
      DropListBox 160,28,72,68, myList(), .Drop_1
      ComboBox 160,52,72,44, myList(), .Combo_1
      PushButton 16,112,48,12, "PushButton_1", .Button_1
      PushButton 72,112,48,12, "PushButton_2", .Button_2
      OKButton 128,112,48,12
      CancelButton 184,112,48,12
   End Dialog

   Dim dlgtest As TestDialog
   Dim dlgid As Integer

   dlgid = Dialog(dlgtest)
   Print "############ ENDE DIALOG - RÜCKGABEWERT:", dlgid
   Print ""
   Print "Werte der Dialogvariablen:"
   Print "--------------------------"
   Print "  OptionGroup:", dlgtest.GROUP_1
   Print "  RadioButton_1:", dlgtest.Radio_1
   Print "  RadioButton_2:", dlgtest.Radio_2
   Print "  CheckBox_1:", dlgtest.Check_1
   Print "  CheckBox_2:", dlgtest.Check_2
   Print "  EditBox:", dlgtest.Edit_1
   Print "  Listbox:", dlgtest.List_1
   Print "  DropListBox:", dlgtest.Drop_1
   Print "  ComboBox:", dlgtest.Combo_1

End Sub


Function CtrlDlgTest(ControlID$, Action%, SuppValue%)

   If Action = 1 then
      Print ""
      Print "############ BEGIN DIALOG ############"
      ' ****** DIES WIRD für 1 SuppValue KORREKT AUSGEFÜHRT *******
      ' MsgBox "DIALOG BEGIN"
      ' ****** WEIL ACTION = 4 AUSGESCHLOSSEN WURDE ***************
   ElseIf Action = 4 Then ' >> Event: Focus wechselt das Objekt
      Print ""
   End If

   Print "ControlID: " & ControlID, "  Action: " & Cstr(Action), "  SuppValue: " & Cstr(SuppValue)

   ' ****** HIER KOMMT ES ZUR ENDLOSSCHLEIFE ****************************
   ' WEIL DER DIALOG DANACH IMMER WIEDER NEU DEN FOCUS ERHÄLT (Action=4)"
   ' MsgBox "ControlID: " & ControlID & Chr(10) & _
   '   "Action: " & Cstr(Action) & Chr(10) & _
   '   "SuppValue: " & Cstr(SuppValue)
   ' ********************************************************************

End Function

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
BeitragVerfasst: 01.09.2008 00:16:16 
Offline
SoftMaker Volunteers
SoftMaker Volunteers

Registriert: 27.08.2008 21:05:27
Beiträge: 250
Wohnort: Wiesbaden
Hurra! - Es GIBT schon ein Picture Element!

Steuerelement Syntax:
         Picture X, Y, Breite, Höhe, Bild Dateiname


- Nur (Windows- ?) Bitmaps (jedenfalls keine *.gif und *.jpg)
- Das Bild wird nicht skaliert, aber zentriert
- Breite und Höhe sind die entspr. Größe in Pixel / 2
- Hintergrund ist weiß.
- .CtrlID sinnlos: liefert immer -1 (soweit ich weiß), und kein Ereignis für die Dialogfunktion

Hehe, das Ass ist euch aus dem Ärmel gefallen [-X

Dann wünsch ich mir eben, für PlanMaker... :mrgreen:
Auch etwas, was schon fast fertig ist...
Dateianhang:
RangeSelector.jpg
RangeSelector.jpg [ 7.28 KiB | 661-mal betrachtet ]

Eine RangeSelector Klasse für Planmaker, mit den nicht-modalen Methoden Getrange und evtl. GetRangeString, falls keine Range-Eigenschaft ".Address" geplant ist (die mir auch sehr fehlt).
Anwendungsbeispiel:
Code:
Dim pm as Object
Set pm = GetObject("","PlanMaker.Application")

Dim userselection As RangeSelector
Set userselection = pm.RangeSelector

Dim r As Object
If 1 = MsgBox("Möchten Sie?", 1) then
    Set r = userselection.GetRange   ' <<< Aufruf des Rangeselectors
    pm.r.ClearFormats
End If
Dankeschön!

_________________
SMO rev. 670 + Win XP                    Times without money are better than times without Mini - the original ;)


Nach oben
 Profil  
 
BeitragVerfasst: 01.09.2008 09:24:55 
Ich hätte so Lust, die vorangegangenen Skripte und Vorschläge in ein kleines Shoes-Skript zu packen.., traue mich aber nicht mehr. :?


Nach oben
  
 
BeitragVerfasst: 01.09.2008 09:31:40 
Offline
SoftMaker Team
SoftMaker Team

Registriert: 03.12.2003 14:32:06
Beiträge: 2985
Monsterslayer hat geschrieben:
Ich hätte so Lust, die vorangegangenen Skripte und Vorschläge in ein kleines Shoes-Skript zu packen.., traue mich aber nicht mehr. :?

Die Beschreibung des Forums lautet "Fehlerberichte, Hilfe und Anregungen zu BasicMaker 2008 für Windows und zum Scripting von SoftMaker Office 2008 allgemein".

Daher ist das hier on-topic.

Aber zugegebenermaßen hätten natürlich mehr Anwender etwas von einem BasicMaker-Script ...

_________________
Martin Kotulla
SoftMaker Software GmbH


Nach oben
 Profil  
 
BeitragVerfasst: 01.09.2008 09:51:29 
martin-k hat geschrieben:
Monsterslayer hat geschrieben:
Ich hätte so Lust, die vorangegangenen Skripte und Vorschläge in ein kleines Shoes-Skript zu packen.., traue mich aber nicht mehr. :?

Die Beschreibung des Forums lautet "Fehlerberichte, Hilfe und Anregungen zu BasicMaker 2008 für Windows und zum Scripting von SoftMaker Office 2008 allgemein".

Daher ist das hier on-topic.

Aber zugegebenermaßen hätten natürlich mehr Anwender etwas von einem BasicMaker-Script ...

Schon klar. :wink:

Die Betonung läge allerdings auf den Möglichkeiten eines recht winzigen und auf Einfachheit getrimmten GUI-Frameworks. Ich sehe, dass die geforderten Funktionen damit recht (unansehnlich aber) leicht darzustellen sind, zum Teil eben, weil ich nicht auf VB und, was Bedienelemente angeht, auch nicht auf OLE setzen muss. In wieweit meine Lösung durch andere Benutzer reproduzierbar oder gar auf verschiedene Anwendungsfälle abstimmbar ist, würde man im Anschluss auch noch diskutieren müssen.

Grundsätzlich lässt sich ja jedes externe Programm über einen Button in SoftMaker Office starten. Wenn es die Arbeitsweise eines VB-Skriptes "nachahmt" oder seine Möglichkeiten übersteigt, bin ich immer versucht, daraus einen Vorschlag zu machen..; es ist manchmal schwierig, die Grenzen zu erkennen oder zu akzeptieren.

Edit: Korrektur


Nach oben
  
 
BeitragVerfasst: 01.09.2008 18:11:51 
Nur mal so, damit es nicht ausschaut als dreschte... drösche ich hier heiße Luft oder ähnlich.
Das Beispiel ist wahrscheinlich nur von akademischem Interesse, zeigt aber die Kürze und Generalisierbarkeit einer solchen Minimallösung. In der aktuellen Version erscheint mir das Teil allerdings beliebig erweiterbar. Ich diskutiere den Code mal mit den Leuten auf rubylearning.org und tüte ihn dann auch ein, wahrscheinlich für rubyforge.net. Das dürfte generell für Spreadsheets interessant sein.

... Erm. Mein Dank an Hoffie für die Inspiration.


Dateianhänge:
Dateikommentar: Optimierte und erweiterte Version mit 2 Processor-Objekten, GPL, v3
RangeSelect_0.1.zip [16.45 KiB]
71-mal heruntergeladen
Dateikommentar: Screenshot
sc.jpg
sc.jpg [ 29.32 KiB | 594-mal betrachtet ]
Nach oben
  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de