1. Diese Seite verwendet Cookies. Wenn Sie sich weiterhin auf dieser Seite aufhalten, akzeptieren Sie unseren Einsatz von Cookies. Weitere Informationen

Anleitung für FixFotos Skript-Dialogeditor 2016-03-05

Anleitung zur Erstellung einer Bedienoberfläche für FF-Skripte mit Hilfe des Dialogeditors als Besta

  1. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    Ich habe jetzt mal angefangen, eine Beschreibung des FF-Dialogeditors zu erstellen. Nach und nach werde ich sie hier veröffentlichen und hoffe auf Ergänzungs- und Verbesserungsvorschläge, Korrekturen und Kritiken.

    FF-Dialogeditor
    Skripte haben den Nachteil, dass für sie keine Bedienoberflächen programmiert werden können, wie man sie beispielsweise von Visual-Basic-Projekten her kennt. Man muss sich mit Eingabe- und Meldeboxen behelfen. Der FFSkript-Editor schließt dies Lücke, indem er mit dem Dialogeditor eine Möglichkeit anbietet, für den Anwender einfach benutzbare Oberflächen zu konstruieren bzw. zu programmieren.
    In den folgenden Beispielen wird als Skriptsprache VisualBasicSkript verwendet. Sie sind aber sicher auch von den Freunden der JavaSkript-Sprache nach zu vollziehen.

    Dialogfeld
    Nachdem mit F11 der FFSkript-Editor gestartet wurde, öffnet man den Dialogeditor durch anklicken mit der linken Maustaste (rechts unten). Unter "Dialog / Neuer Dialog" gibt man einen Namen für den zu erstellenden Dialog ein, z.B. Dialogdemo. Nach Bestätigung mit OK wird das Dialogfeld mit dem vergebenen Namen und mit Breite und Höhe, hier 100, 80, angezeigt.

    Durch Ziehen mit der Maus lässt sich die Größe des Feldes beliebig verändern.

    Wenn man jetzt "Dialog / Speichern" anklickt, wird automatisch ein Code erzeugt, der eingeschlossen durch

    '** Start Dialog Dialogdemo ** und
    '** End Dialog Dialogdemo ** ​

    das Dialogfeld beschreibt, in unserem Fall erst einmal nur FF_AddDialog "Dialogdemo",100,80, womit der Dialog "Dialogdemo" mit einer Breite von 100 und einer Höhe von 80 angelegt wird. Die Größe des Dialogfeldes kann statt im Dialogeditor auch durch direktes Editieren geändert werden.

    Oberhalb dieses Codes gibt man nun erst einmal für das neue Skript einen Kategorienamen und den darin gewünschten Eintrag an, hier als Beispiel Demo und Dialog:

    'FFSubmenu=Demo
    'FFName=Dialog​

    Und am Codeende ruft man mit FF_ShowDialog ("Dialogdemo") den Dialog auf.

    Der komplette Code sieht jetzt wie folgt aus:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog
    
    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,80
    '** End Dialog Dialogdemo **
    
    FF_ShowDialog ("Dialogdemo")
    Spätestens jetzt sollte das Skript abgespeichert werden. Dabei ist darauf zu achten, dass links unten die richtige Skriptart angekreuzt ist, in unserem Fall VBScript. Nach Betätigung von Speichern muss man unbedingt kontrollieren, ob der Skriptordner von FixFoto angewählt ist. In der Regel ist das der Ordner "C:\Programme\FixFoto\Params\Script". Nun gibt man einen sinnvollen Dateinamen, z.B. Dialogdemo ein und bestätigt mit OK, womit das Skript als Dialogdemo.vbs abgespeichert wird. Wenn man jetzt links "autom. Konfiguration" betätigt, wird im linken Fenster die Kategorie Demo erzeugt (wenn nicht schon vorhanden) und dort der Eintrag Dialog angezeigt. Zum Test kann man jetzt auf Ausführen klicken und es wird das nackte Dialogfeld Dialogdemo angezeigt. Der Ausführen-Button bleibt solange rot, bis das x im Dialog rechts oben betätigt wird. Damit kann man zwar noch nicht viel anfangen, aber wir haben jetzt ein Grundgerüst, auf dem aufgebaut werden kann.
    Übrigens, nach Schließen des Editors, sucht man das Skript Dialog in FixFoto vergebens. Dazu bitte FixFoto beenden und neu starten, und siehe da – in der Kategorie Demo kann jetzt Dialog gestartet werden.

    Wenn man das Dialogfeld weiter bearbeiten möchte, öffnet man das Skript im FFSkript-Editor wieder durch einen Doppelklick auf den Namen Dialog im linken Auswahlfenster. Wird jetzt der Dialogeditor aufgerufen, kann man das Dialogfeld beliebig verändern und ergänzen.
     
    #1 Mecki14, 25.12.07
    Zuletzt bearbeitet: 07.01.08
  2. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für Dialogerstellung

    Steuerelemente
    Im Dialogfeld können nun verschiedene Steuerelemente platziert werden. Um die prinzipielle Vorgehensweise zu zeigen, wird der oben erzeugte Dialog im folgenden ergänzt um die Befehlschaltfläche Ende. Im Dialogeditor klickt man über "Steuerelement / Neu" auf BUTTON und gibt ihm den Namen Ende. Nach OK wird er im Dialogfeld links oben platziert angezeigt und kann jetzt mit der Maus beliebig verschoben und auch in seiner Größe geändert werden. Dabei wird oben in einer Statuszeile "Ende:" angezeigt, gefolgt vom Abstand des Elements bis zum linken und oberen Rand und dann Breite x Höhe. Genau positionieren lässt sich das selektierte Element mit den Cursortasten.
    Um sich eine Eindruck vom späteren Aussehen zu verschaffen, kann man "Dialog / Dialog testen" aufrufen oder einfach F5 drücken. Die Ansicht wird mit Anklicken von x rechts oben geschlossen. Den Dialogeditor beendet man, indem über "Dialog / Speichern" die Ergänzung gesichert wird. Der Skriptcode wird automatisch ergänzt um

    FF_AddControl "Dialogdemo","Ende","BUTTON",54,60,33,11

    Auch hier kann sowohl der Abstand nach links und nach oben, als auch Breite mal Höhe des Elements frei editiert werden.

    Jetzt muss noch per Code die Betätigung des Buttons Ende abgefragt und damit der Dialog beendet werden. Die Info, ob eine Befehlstaste betätigt wurde, ist Bestandteil des Befehls
    FF_ShowDialog ("Dialogdemo"). Dieser wird in einer Schleife auf die Variable Taste übertragen. Wenn diese den Inhalt Ende oder CANCEL (das ist der Befehl, der mit Betätigung von x rechts oben ausgelöst wird) hat, soll die Schleife verlassen und der Dialog geschlossen werden. Der Code, ergänzt um den Zusatz Option Explicit und der Variablendimensionierung (der sauberen Programmierung wegen), sieht dann wie folgt aus:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog
    
    Option Explicit
    Dim Taste
    
    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,80
    FF_AddControl "Dialogdemo","Ende","BUTTON",54,60,33,11
    '** End Dialog Dialogdemo **
    
    do
    	Taste = FF_ShowDialog("Dialogdemo")		'Befehle abfragen und Dialog öffnen
    	if Taste = "Ende" or Taste = "CANCEL" then	'bei Ende oder Cancel Schleife verlassen
    		exit do
    	end if
    loop
    
    FF_CloseDialog("Dialogdemo")			'Dialog schließen
    msgbox "Dialog wurde beendet"			'Meldung
    
    
    Die Schleife ist notwendig, damit der Dialog bei Verwendung weiterer Befehlsschaltflächen geöffnet bleibt. Dies wird später deutlich.

    Zur Konstruktion der Bedienoberfläche stehen folgende Steuerelemente zur Verfügung:

    GROUP - optische Rahmen zur Zusammenfassung mehrer Elemente
    BOOL - Kontrollkästchen zur Auswahl einer Funktion
    STATIC - Bezeichnungsfeld, das nicht vom Benutzer geändert werden kann
    BUTTON - Befehlsschaltfläche
    EDIT - Textfeld mit Zeilenumbruch an der Feldgrenze
    SLEDIT - Textfeld ohne Zeilenumbruch
    LISTBOX - Auflistung von Elementen zur Auswahl
    COMBO - Klappliste von Elementen zur Auswahl
    COLOR - Farbauswahl
    FONT - Schriftauswahl
    IMAGE - Feld zur Anzeige eines Bildes
    HSLIDER - horizontaler Schieber zur Zahlenvorgabe von 0 bis 255
    VSPIN - vertikale Pfeile zur Zahlenvorgabe in 1er Schritten


    Diese werden in den folgenden Kapiteln im einzelnen erläutert, allerdings nicht unbedingt in dieser Reihenfolge.

    Und dann ist da noch die Sache mit den Stilen. Bei den meisten Steuerelementen lassen sich im Dialogeditor für das Element, das den Fokus hat, über "Steuerelement / Stile setzen" diverse Eigenschaften festlegen. Sollen dies direkt mehrere sein, muss bei der Auswahl mit der linken Maustaste die Strg-Taste festgehalten werden. Was die Eigenschaften bzw. Stile im einzelnen bedeuten, wird im Einzelfall bei den Erläuterungen der einzelnen Steuerelemente angegeben.
     
    #2 Mecki14, 25.12.07
    Zuletzt bearbeitet: 07.01.08
  3. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für Dialogerstellung

    BOOL, STATIC und GROUP
    Das Steuerelement BOOL stellt ein Kontrollkästchen dar. Wir öffnen den Dialogeditor und positionieren zwei dieser Elemente mit den Namen "Option1" und "Option2" in das Dialogfeld. Danach schließen wir den Editor wieder durch Speichern. Wird jetzt das Skript ausgeführt, sieht man die beiden Kontrollkästchen, die durch Anklicken beliebig ein- und ausgeschaltet werden können.
    Gut wäre jetzt noch die jeweilige Benennung der Kontrollkästchen und eine optische Zusammenfassung. Die Benennung erfolgt mit zwei STATIC-Elementen, der wir die Namen "Option A" und "Option B" geben. Dann rahmen wir die BOOL- und STATIC-Elemente mit dem Element GROUP ein und geben diesem den Namen Optionen. Das sieht jetzt im Dialogeditor ungefähr so aus:

    [​IMG]

    Wieder den Dialog speichern und nicht vergessen, auch immer wieder zwischendurch den Code speichern!

    Natürlich muss auch die Aktivierung von Option A und B mal irgendwie ausgewertet werden. Das geschieht mit dem Befehl FF_GetControl (dialog, name). Der Rückgabewert von BOOL ist im aktivierten Zustand "1", im deaktivierten "0".
    Im Beispiel soll nach Beendigung des Skript mit dem BUTTON Ende angezeigt werden, was angekreuzt wurde:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog
    
    Option Explicit
    Dim Taste, msg
    
    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,80
    FF_AddControl "Dialogdemo","Optionen","GROUP",8,2,58,34
    FF_AddControl "Dialogdemo","Ende","BUTTON",54,60,33,11
    FF_AddControl "Dialogdemo","Option1","BOOL",12,14,8,8
    FF_AddControl "Dialogdemo","Option2","BOOL",12,24,8,8
    FF_AddControl "Dialogdemo","Option A","STATIC",24,13,33,11
    FF_AddControl "Dialogdemo","Option B","STATIC",24,23,33,11
    '** End Dialog Dialogdemo **
    
    do
    	Taste = FF_ShowDialog("Dialogdemo")		'Befehle abfragen und Dialog öffnen
    	if Taste = "Ende" or Taste = "CANCEL" then	'bei Ende oder Cancel Schleife verlassen
    		exit do
    	end if
    loop
    
    if FF_GetControl ("Dialogdemo","Option1") = "1" then 	'BOOL Option1 abfragen
    	msg = "Option A wurde aktiviert" & vbNewline
    else
    	msg = "Option A wurde deaktiviert" & vbNewline
    end if
    
    if FF_GetControl ("Dialogdemo","Option2") = "1" then	'BOOL Option2 abfragen
    	msg = msg & "Option B wurde aktiviert" & vbNewline
    else
    	msg = msg & "Option B wurde deaktiviert" & vbNewline
    end if
    
    FF_CloseDialog("Dialogdemo")			'Dialog schließen
    msgbox msg & vbNewline & "Dialog ist beendet"	'Ergebnis anzeigen
    
     
    #3 Mecki14, 25.12.07
    Zuletzt bearbeitet: 22.10.08
  4. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    BUTTON
    Wie das Element BUTTON eingesetzt wird, wurde oben im Kapitel Steuerelemente bereits gezeigt. Hier soll noch mal näher erläutert werden, warum es sinnvoll ist, die Abfrage von Befehlsschaltflächen in einer Schleife vorzunehmen.
    Die Aufgabe soll sein, mit einem BUTTON Anzeige die Zustände der BOOL-Elemente aus dem Beispiel vorher anzuzeigen und dabei das Dialogfeld sichtbar zu lassen. Das Dialogfeld soll nur mit Ende bzw. CANCEL geschlossen und das Skript beendet werden. Dazu fügen wir über den Editor einen zusätzlichen BUTTON mit dem Namen Anzeigen hinzu. Nach dem Sichern ändern wir den Code wie folgt:

    - Die Abfrage der BOOL-Elemente wird in eine SUB-Routine Auswertung überführt.
    - In der Schleife wird bei Betätigung der Taste Anzeigen die Auswertung aufgerufen und diese angezeigt ohne die Schleife zu verlassen.
    - Bei Betätigung von CANCEL wird das Skript vorzeitig beendet und bei Ende geht es raus aus der Schleife und das Dialogfeld wird geschlossen.
    - Außerdem werden die "If Then"-Abfragen der Variablen Taste ersetzt durch "Select Case ", um den Code einfacher lesbar zu machen.

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog
    
    Option Explicit
    Dim Taste, msg
    
    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,80
    FF_AddControl "Dialogdemo","Optionen","GROUP",7,3,58,34
    FF_AddControl "Dialogdemo","Ende","BUTTON",54,58,33,11
    FF_AddControl "Dialogdemo","Option1","BOOL",12,14,8,8
    FF_AddControl "Dialogdemo","Option2","BOOL",12,24,8,8
    FF_AddControl "Dialogdemo","Option A","STATIC",24,13,33,11
    FF_AddControl "Dialogdemo","Option B","STATIC",24,23,33,11
    FF_AddControl "Dialogdemo","Anzeigen","BUTTON",7,58,33,11
    '** End Dialog Dialogdemo **
    
    do
    	Taste = FF_ShowDialog ("Dialogdemo")	'Befehle abfragen und Dialog öffnen
    
    	Select Case Taste
    		Case "CANCEL"			'bei Cancel Abbruch des Skript
    			FF_CloseDialog ("Dialogdemo")	
    			FF_ErrorBreak "Abbruch"
    		Case "Ende"			'bei Ende Schleife verlassen
    			exit do
    		Case "Anzeigen"
    			call Auswertung
    			msgbox msg		'Ergebnis anzeigen
    	End Select
    loop
    
    FF_CloseDialog ("Dialogdemo")			'Dialog schließen
    msgbox "Dialog ist beendet"			'Meldung
    
    '--------------------------------------------------------------------------
    Sub Auswertung
    if FF_GetControl ("Dialogdemo","Option1") = "1" then 	'BOOL Option1 abfragen
    	msg = "Option A ist aktiviert" & vbNewline
    else
    	msg = "Option A ist deaktiviert" & vbNewline
    end if
    
    if FF_GetControl ("Dialogdemo","Option2") = "1" then	'BOOL Option2 abfragen
    	msg = msg & "Option B ist aktiviert"
    else
    	msg = msg & "Option B ist deaktiviert"
    end if
    End Sub
    '--------------------------------------------------------------------------
    
    
    Bei konkreten Skripten würde natürlich Ende umbenannt in beispielsweise Ausführen und damit das eigentliche Skript weiter ausgeführt. Dabei ist wichtig, dass im Skript Einstellungen des Benutzers im Dialogfeld erst in Variable abgespeichert werden, bevor das Dialogfeld geschlossen wird.
     
    #4 Mecki14, 25.12.07
    Zuletzt bearbeitet: 07.01.08
  5. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    ... und noch mal BOOL
    Und jetzt werden noch mal BOOL-Elemente eingesetzt, aber diesmal mit Befehlseigenschaft.

    Es besteht folgende Aufgabe:
    Das folgende Skript soll erweitert werden um eine zweite Gruppe Auswahl mit zwei Kontrollkästchen Auswahl_ A und Auswahl_ B, die wieder mit Option A und Option B über STATIC-Elemente benannt werden. Es soll immer nur eins der beiden Elemente auswählbar sein. Bei Start des Skript soll Auswahl_A (bzw. Option A) bereits aktiviert sein.

    Dazu wird erst einmal im Dialogeditor das Dialogfeld in der Höhe vergrößert auf beispielsweise 100 und die beiden Befehlsschaltflächen Anzeigen und Ende nach unten gerückt. Dann wird unterhalb der bestehenden Gruppe ein zweites GROUP-Element gleicher Größe mit dem Namen Auswahl aufgezogen.
    In diesen Rahmen hinein wird ein BOOL-Element mit dem Namen Auswahl_A konstruiert. Damit bei diesem Element das Anklicken per Code erkannt werden kann, muss ihm der Stil BS_NOTIFY zugeordnet werden. Dies geschieht über "Steuerelement / Stil setzen" und anklicken von BS_NOTIFY,... solange das Element Auswahl_A den Fokus hat.
    Jetzt soll das nächste Element Auswahl_B mit gleicher Eigenschaft erzeugt werden. Das kann auf dem gleichen Wege geschehen oder einfacher mit Klonen. Man gibt dem Element Auswahl_A den Fokus und klickt "Steuerelement / Klonen" an. Als Name wird Auswahl_B vergeben. Jetzt muss das Element nur noch positioniert werden.
    Als nächstes sollen die Kontrollkästchen mit STATIC-Elementen mit Option A und Option B benannt werden. Bei dem Versuch das zu tun, erhält man die Meldung

    "Dieser Name existiert bereits"

    Das Problem kann gelöst werden, indem man an den Namen ein Pipe-Symbol "|" anhängt, denn es gilt die Regel:

    Enthaltene Pipe-Zeichen '|' in den Namen von BUTTON und STATIC werden
    bei der Anzeige unterdrückt. Dies ermöglicht die Verwendung identischer Beschriftungen.

    Das tatsächlich nur Option A angezeigt wird, lässt sich mit der Vorschau über F5 leicht kontrollieren.
    Die zweite Beschriftung Option B wird genauso erzeugt und man erhält folgendes Dialogfeld:

    [​IMG]

    Wenn man den Dialog speichert, sieht man im Code, dass den neuen Kontrollkästchen mit dem Befehl FF_SetControlStyle jeweils eine codierte Eigenschaft zugeordnet wurde.
    Damit die Übersicht nicht verloren geht, wird empfohlen (kein muss), die Dialogbefehle so umzusortieren, dass sie die Reihenfolge ihres Auftretens wiederspiegeln, beispielsweise so:

    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,100
    FF_AddControl "Dialogdemo","Optionen","GROUP",8,2,58,34
    FF_AddControl "Dialogdemo","Option1","BOOL",12,14,8,8
    FF_AddControl "Dialogdemo","Option A","STATIC",24,13,33,11
    FF_AddControl "Dialogdemo","Option2","BOOL",12,24,8,8
    FF_AddControl "Dialogdemo","Option B","STATIC",24,23,33,11
    FF_AddControl "Dialogdemo","Auswahl","GROUP",8,38,58,34
    FF_AddControl "Dialogdemo","Auswahl_A","BOOL",12,49,8,8
    FF_SetControlStyle "Dialogdemo","Auswahl_A",16384
    FF_AddControl "Dialogdemo","Option A|","STATIC",24,48,33,11
    FF_AddControl "Dialogdemo","Auswahl_B","BOOL",12,60,8,8
    FF_SetControlStyle "Dialogdemo","Auswahl_B",16384
    FF_AddControl "Dialogdemo","Option B|","STATIC",24,58,33,11
    FF_AddControl "Dialogdemo","Anzeigen","BUTTON",8,80,33,11
    FF_AddControl "Dialogdemo","Ende","BUTTON",54,80,33,11
    '** End Dialog Dialogdemo **

    Um die Aufgabe zu erfüllen
    - wird mit FF_SetControl "Dialogdemo","Auswahl_A","1" die Option A vorbesetzt
    - in der Schleife wird Auswahl_A und Auswahl_B wie ein Befehl abgefragt und die BOOL-Elemente entsprechend gesetzt
    - in der SUB Auswertung wird der Meldetext ergänzt

    Der gesamte Code sieht jetzt wie folgt aus:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog
    
    Option Explicit
    Dim Taste, msg
    
    '** Start Dialog Dialogdemo **
    FF_AddDialog "Dialogdemo",100,100
    FF_AddControl "Dialogdemo","Optionen","GROUP",8,2,58,34
    FF_AddControl "Dialogdemo","Option1","BOOL",12,14,8,8
    FF_AddControl "Dialogdemo","Option A","STATIC",24,13,33,11
    FF_AddControl "Dialogdemo","Option2","BOOL",12,24,8,8
    FF_AddControl "Dialogdemo","Option B","STATIC",24,23,33,11
    FF_AddControl "Dialogdemo","Auswahl","GROUP",8,38,58,34
    FF_AddControl "Dialogdemo","Auswahl_A","BOOL",12,49,8,8
    FF_SetControlStyle "Dialogdemo","Auswahl_A",16384
    FF_AddControl "Dialogdemo","Option A|","STATIC",24,48,33,11
    FF_AddControl "Dialogdemo","Auswahl_B","BOOL",12,60,8,8
    FF_SetControlStyle "Dialogdemo","Auswahl_B",16384
    FF_AddControl "Dialogdemo","Option B|","STATIC",24,58,33,11
    FF_AddControl "Dialogdemo","Anzeigen","BUTTON",8,80,33,11
    FF_AddControl "Dialogdemo","Ende","BUTTON",54,80,33,11
    '** End Dialog Dialogdemo **
    
    FF_SetControl "Dialogdemo","Auswahl_A","1"		'Auswahl_A mit 1 vorbesetzen
    
    do
    	Taste = FF_ShowDialog ("Dialogdemo")		'Befehle abfragen und Dialog öffnen
    	
    	Select Case Taste
    	Case "Auswahl_A"
    		FF_SetControl "Dialogdemo","Auswahl_A","1"
    		FF_SetControl "Dialogdemo","Auswahl_B","0"		
    	Case "Auswahl_B"
    		FF_SetControl "Dialogdemo","Auswahl_A","0"
    		FF_SetControl "Dialogdemo","Auswahl_B","1"
    	Case "CANCEL"					'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialogdemo")	
    		FF_ErrorBreak "Abbruch"
    	Case "Ende"					'bei Ende Schleife verlassen
    		exit do
    	Case "Anzeigen"
    		call Auswertung
    		msgbox msg				'Ergebnis anzeigen
    	Case Else
    	End Select
    loop
    
    FF_CloseDialog ("Dialogdemo")				'Dialog schließen
    msgbox "Dialog ist beendet"				'Meldung
    
    '----------------------------------------------------------------
    Sub Auswertung
    
    	msg = "Optionen" & ":" & vbNewLine
    
    	if FF_GetControl ("Dialogdemo","Option1") = "1" then 
    		msg = msg & "Option A ist aktiviert" & vbNewline
    	else
    		msg = msg & "Option A ist deaktiviert" & vbNewline
    	end if
    
    	if FF_GetControl ("Dialogdemo","Option2") = "1" then
    		msg = msg & "Option B ist aktiviert"
    	else
    		msg = msg & "Option B ist deaktiviert"
    	end if
    	
    	msg = msg & vbNewLine & vbNewLine & "Auswahl" & ":" & vbNewLine
    	
    	if FF_GetControl ("Dialogdemo","Auswahl_A") = "1" then
    		msg = msg & "Option A wurde ausgewählt"
    	else
    		msg = msg & "Option B wurde ausgewählt"
    	end if
    	
    End Sub
    '----------------------------------------------------------------
     
    #5 Mecki14, 25.12.07
    Zuletzt bearbeitet: 22.10.08
  6. Jochen

    Jochen Mitglied

    Dabei seit:
    02.12.02
    Beiträge:
    1.546
    Zustimmungen:
    0
    AW: Anleitung für FixFotos Skript-Dialogeditor

     
  7. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Hallo Jochen,
    vielen Dank für Deine positive Reaktion. Hier meine Meinung zu den einzelnen Punkten:

    Erst muss ich mal die Anleitung fertig stellen. Dann mal weitersehen.

    Das ist sicher Ansichtssache, aber ich gebe zu, dass "select case" übersichtlicher ist. Ich werde demnächst die Anleitung entsprechend umstellen.
    - schon geschehen -

    Call ist zwar überflüssig, aber ich bin der Meinung, dass Call die Programme besser lesbar macht. Man kann leichter erkennen, wo ein Unterprogrammaufruf erfolgt.
     
    #7 Mecki14, 26.12.07
    Zuletzt bearbeitet: 26.12.07
  8. ralfeberle

    ralfeberle FF-Team

    Dabei seit:
    10.07.02
    Beiträge:
    11.286
    Zustimmungen:
    0
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Hallo!

    Ich bin auch für CALLs, das erlaubt fremde Skripte schneller zu verstehen. Bei Basic-ähnlichen Sprachen gehört das für mich zum guten Stil, in anderen Sprachen allerdings nicht so sehr. Ohne CALLs ist es besser, längere sprechende Namen für Subroutinen zu vergeben - und längere 'Wörter' lesen sich einfach schlechter, vor allem wenn man den Programmcode nur überfliegt, weil man was sucht.

    Gruß,

    Ralf
     
  9. Jochen

    Jochen Mitglied

    Dabei seit:
    02.12.02
    Beiträge:
    1.546
    Zustimmungen:
    0
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Call Initialisieren
    Call Eingabe(A)
    Call Eingabe(B)
    Call Umrechnen(A,B,C)
    Call Ausgabe(C)
    Call Aufraeumen
    Call Ende

    oder

    Initialisieren
    Eingabe A
    Eingabe B
    Umrechnen A,B,C
    Ausgabe C
    Aufraeumen
    Ende

    Das ist besser lesbar, oder?
    Was gewinnt man durch Call's? Nix. Sub/Func-Namen stehen an Anweisungsstelle - da gibt es überhaupt keinen Zweifel, dass es sich um Routinenaufrufe handelt. Letztlich kann das jeder machen, wie er will. Aber die überflüssigen Calls als Lesekrücken machen ein Programm keinen Deut professioneller, es macht nur einen unbeholfenen Eindruck.
     
  10. ralfeberle

    ralfeberle FF-Team

    Dabei seit:
    10.07.02
    Beiträge:
    11.286
    Zustimmungen:
    0
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Hallo Jochen!

    Da kommen wir nicht zusammen. Für mich muß ein Programm aus Programmbefehlen bestehen und nicht wie ein Roman zu lesen sein, da finde ich mich viel schwerer zurecht. Es ist nun mal so, daß der Mensch beim Überfliegen von Programmen ein Suchraster einschaltet. Wenn alle Subroutinen-Aufrufe mit CALL anfangen, erkennt man das schneller.

    Der Blick kann von CALL zu CALL hüpfen. Ohne CALLs ist man gezwungen, semantisch im Gehirn zu dekodieren, ob nun ein Programmbefehl oder ein Subroutinenaufruf vorliegt. Anders ausgedrückt, das was man an Subroutinenaufrufen als Klartext liest, muß mehr Verarbeitungsschichten durchlaufen als ein CALL, das man nicht liest, sondern bereits an seiner Form erkennt - wie ein Bild.

    Ich erinnere mich mit Grauen an Programmiersprachen, in denen alles klein geschrieben wurde. Dort war ein rasches Unterscheiden zwischen Befehl, Variablen und Subroutinen nicht mehr möglich. Das mag durch moderne Editoren, die automatisch farblich unterscheiden heute anders sein - und auch das CALL-Argument entkräften. Doch erst mal so einen Editor haben.

    Gruß,

    Ralf
     
  11. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    .. und hier geht's nach allgemeinem Meinungsaustausch weiter mit der Beschreibung.

    Zwischenbilanz
    Mit dem bisher Gelerntem lässt sich bereits eine einfache Bedienoberfläche zur Voreinstellung eines Skripts ansprechend gestalten. Hier werden noch mal einige wichtige Punkte aufgelistet:

    • Unbedingt immer beim Verlassen des Dialogeditors speichern und auch im FFSkript-Editor immer wieder mal zwischenspeichern.
    • Im Dialogeditor immer die Position und Größe des Steuerelements in der Statuszeile oben im Auge behalten. Ein Steuerelement, das den Fokus hat, kann genau mit den Cursortasten positioniert werden.
    • Bei der grafischen Konstruktion eines Dialogfeldes kann mit F5 eine Vorschau aufgerufen werden. Ausgeschaltet wird über das x oben rechts.
    • Befehle im Code sollten innerhalb einer Schleife (do-loop) abgefragt werden um die Anzeige des Dialogfeldes erhalten zu können.
    • Ein Dialogfeld beinhaltet immer den Befehl CANCEL. Er wird ausgelöst durch Anklicken des x oben rechts und sollte immer für den vorzeitigen Abbruch eines Skripts ausgewertet werden.
    • Eigenschaften von Steuerelementen werden über "Stile setzen" festgelegt. Dabei muss das Element den Fokus haben. Die Zuordnung mehrerer Stile zu einem Element ist durch Festhalten der Strg-Taste während des Setzens möglich.
    • Mehrere Steuerelemente gleicher Art, gleicher Größe und mit gleichen Eigenschaften (Stilen) können durch Klonen erzeugt werden.
    • Um BOOL-Elemente wie Befehlsschaltflächen behandeln zu können, muss der Stil BS_NOTIFY bei diesem Element gesetzt sein.
    • Zur Verwendung gleicher Beschriftungen bei BUTTON- und STATIC-Elementen können in den Namen Pipe-Symbole "|" eingesetzt werden. Bei der Anzeige werden diese unterdrückt.
    • Vor Schließen des Dialogfeldes mit FF_CloseDialog die vorgenommenen Einstellungen in Variablen sichern. Nach Beenden des Dialogs stehen diese nicht mehr zur Verfügung.
     
  12. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    EDIT und SLEDIT
    Beide Steuerelemente dienen zur Eingabe und Anzeige von Text. Um den Unterschied zu verdeutlichen, legen wir ein neues Dialogfeld Dialog_T von der Größe 85 x 100 an und konstruieren dort hinein
    • ein Steuerelement EDIT mit dem Namen TxtEdit und bezeichnen es über ein STATIC-Element mit "EDIT-Element"
    • ein Steuerelement SLEDIT mit dem Namen TxtSlEdit und bezeichnen es über ein STATIC-Element mit "SLEDIT-Element"
    • Beide Elemente sollten mindestens eine Höhe von 30 haben, damit die unterschiedlichen Eigenschaften demonstriert werden können
    • Darunter wird noch ein BUTTON Ende angelegt.

    Die Vorschau sollte jetzt ungefähr so aussehen:

    [​IMG]

    Der Code dazu lautet:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_T
    
    '** Start Dialog Dialog_T **
    FF_AddDialog "Dialog_T",85,100
    FF_AddControl "Dialog_T","EDIT-Element","STATIC",4,8,33,11
    FF_AddControl "Dialog_T","TxtEdit","EDIT",45,8,35,30
    FF_AddControl "Dialog_T","SLEDIT-Element","STATIC",4,48,37,11
    FF_AddControl "Dialog_T","TxtSlEdit","SLEDIT",45,47,35,30
    FF_AddControl "Dialog_T","Ende","BUTTON",45,84,34,11
    '** End Dialog Dialog_T **
    
    
    do
    	Select Case FF_ShowDialog ("Dialog_T")	'Befehle abfragen und Dialog öffnen
    	Case "CANCEL"				'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_T")	
    		FF_ErrorBreak "Abbruch"
    	Case "Ende"				'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    FF_CloseDialog ("Dialog_T")				'Dialog schließen
    msgbox "Dialog ist beendet"				'Meldung
    
    
    Wenn man das Skript ausführt und gibt wahllos Text in die beiden Elemente EDIT und SLEDIT ein, sieht man, dass bei EDIT der Text an der Elementengrenze automatisch umgebrochen und bei SLEDIT der Text einfach fortgeführt wird, auch in den nicht sichtbaren Bereich hinein. Das kann man sich gut merken, wenn man weiß, dass SLEDIT Single-Line-Edit heißt.

    [​IMG]

    Bei den Textfeldern steht dem Benutzer übrigens das bekannte Kontextmenü zum Kopieren, Einfügen ect. zur Verfügung.

    Rückgängig
    --------------
    Ausschneiden
    Kopieren
    Einfügen
    Löschen
    --------------
    Alles markieren​

    Interessant sind die Stile, die bei beiden Textelementen gleich sind.

    Die Textausrichtung wird vorgegeben mit
    • ES_LEFT - Textausrichtung links
    • ES_RIGHT - Textausrichtung rechts
    • ES_CENTER - Textausrichtung Mitte

    Beschränkung auf Groß- und Kleinbuchstaben wird festgelegt mit
    • ES_LOWER - nur Kleinbuchstaben
    • ES_UPPER - nur Großbuchstaben

    Weitere zugelassene Stile sind
    • ES_NOHIDESEL - bedeutet, dass die Hervorhebung der Selektion nicht weggenommen wird, wenn das Steuerelement den Fokus verliert.
    • ES_NUMBER - erlaubt nur die Eingabe von Zahlen
      Bei Eingabe anderer Zeichen wird darauf hingewiesen (siehe Screenshot oberes Feld)
    • ES_PASSWORD - eingegebene Zeichen werden als Punkte dargestellt
      (siehe Screenshot unteres Feld)
      Natürlich kann per Code mit FF_GetControl die Originaleingabe ermittelt werden.

    [​IMG]

    • ES_READONLY - Text per Code zur Anzeige vorzugeben ist mit FF_SetControl möglich.
      Eingaben durch den Benutzer sind gesperrt.

    ------------------------------------------------------------------------------------------

    Wer kann bezüglich ES_NOHIDESEL helfen?
    Oben Dank Hilfe von hhoefling und diverser PNs inzwischen ergänzt mit einigen zusätzlichen Anmerkungen.
     
    #12 Mecki14, 27.12.07
    Zuletzt bearbeitet: 22.10.08
  13. hhoefling

    hhoefling Mitglied

    Dabei seit:
    02.01.04
    Beiträge:
    3.984
    Zustimmungen:
    0
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Das bedeutet das die Hervorhebung der Selektion nicht weggenommen wird (hide),
    wenn das Control den Fokus verliert.

    Und...
    SLEDIT heist deshalb ja auch Single-Line-Edit
     
  14. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Hallo Heinz,
    vielen Dank für die Unterstützung von Dir und auch den Schreibern der PNs zu diesem Thema. Vollkommen neu war mir die Erläuterung von SLEDIT, die das Merken der Single-Line-Eigenschaft ja erheblich vereinfacht.
     
  15. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    LISTBOX und COMBO
    Beide dienen der Auswahl eines Elementes aus einer vorgegebenen Auflistung. Um dies zu demonstrieren legen wir ein Feld Dialog_LC mit folgendem Inhalt an:


    • Oben rechts eine LISTBOX mit dem Namen Liste_L, benannt mit Auflistung per STATIC-Element
    • Darunter ein COMBO-Element mit dem Namen Liste_C, benannt mit Klappliste per STATIC-Element
    • Darunter einen BUTTON Ende

    [​IMG]

    Im dazugehörigen Code müssen die beiden Listen mit den auszuwählenden Begriffen gefüllt werden. Dies geschieht mit dem Befehl FF_SetControl.
    Hier wurden für die LISTBOX als Beispiel die Begriffe Adam, Eva, Kain, Abel und für das COMBO-Element die Zahlen 256, 512, 1024, 2048 und 4096 vorgegeben.
    Bei beiden Elementen kann ein Begriff favorisiert werden, indem man ihn mit FF_SetControl ein zweites Mal vorgibt. Dies soll hier bei der LISTBOX mit Kain und beim COMBO-Element mit 1024 gemacht werden.
    Mit Ende werden die vom Benutzer gewählten Begriffe angezeigt.

    Der Code sieht wie folgt aus:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_LC
    
    Option Explicit
    Dim Listenauswahl, Klapplistenwahl
    
    '** Start Dialog Dialog_LC **
    FF_AddDialog "Dialog_LC",110,100
    FF_AddControl "Dialog_LC","Auflistung","STATIC",10,8,33,11
    FF_AddControl "Dialog_LC","Liste_L","LISTBOX",60,8,33,44
    FF_AddControl "Dialog_LC","Klappliste","STATIC",10,56,33,11
    FF_AddControl "Dialog_LC","Liste_C","COMBO",60,56,33,10
    FF_AddControl "Dialog_LC","Ende","BUTTON",39,78,33,11
    '** End Dialog Dialog_LC **
    
    'Auflistung füllen
    FF_SetControl "Dialog_LC","Liste_L","Adam"
    FF_SetControl "Dialog_LC","Liste_L","Eva"
    FF_SetControl "Dialog_LC","Liste_L","Kain"
    FF_SetControl "Dialog_LC","Liste_L","Abel"
    FF_SetControl "Dialog_LC","Liste_L","Kain"	'Vorgabe machen
    
    'Klappliste füllen
    FF_SetControl "Dialog_LC","Liste_C","256"
    FF_SetControl "Dialog_LC","Liste_C","512"
    FF_SetControl "Dialog_LC","Liste_C","1024"
    FF_SetControl "Dialog_LC","Liste_C","2048"
    FF_SetControl "Dialog_LC","Liste_C","4096"
    FF_SetControl "Dialog_LC","Liste_C","1024"	'Vorgabe machen
    
    
    do
    	Select Case FF_ShowDialog ("Dialog_LC")	'Befehle abfragen und Dialog öffnen
    	Case "CANCEL"				'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_LC")	
    		FF_ErrorBreak "Abbruch"
    		exit do
    	Case "Ende"				'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    'Auswahlwerte sichern
    Listenauswahl = FF_GetControl ("Dialog_LC","Liste_L")
    Klapplistenwahl = FF_GetControl ("Dialog_LC","Liste_C")
    
    FF_CloseDialog ("Dialog_LC")			'Dialog schließen
    
    msgbox "Gewählt wurde" & vbNewLine & _
    	   "aus der Auflistung - " & Listenauswahl & vbNewLine & _
    	   "aus der Klappliste  - " & Klapplistenwahl & vbNewLine & vbNewLine & _
    	   "Dialog ist beendet", vbOk, "Meldung"
    Der Inhalt der LISTBOX und des COMBO-Elements kann jeweils mit einem Nullstring ("") als Wert im Befehl FF_SetControl (dialog, name, wert) gelöscht werden:

    FF_SetControl "Dialog_LC","Liste_L","" 'Löschen der Auflistung
    FF_SetControl "Dialog_LC","Liste_C","" 'Löschen der Klappliste
     
    #15 Mecki14, 01.01.08
    Zuletzt bearbeitet: 22.10.08
  16. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    FONT und COLOR
    Mit FONT kann eine Schrift, mit COLOR eine Farbe ausgewählt werden.

    Im neuen Dialog_FC legt man ein FONT- und ein COLOR-Steuerelement an, benannt mit Schriftwahl und Farbwahl. Mit STATIC-Elementen bezeichnet man sie entsprechend mit "Schriften:" und "Farben:".
    Der Code dazu lautet:

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_FC
    
    Option Explicit
    Dim Schrift, Farbe
    
    '** Start Dialog Dialog_FC **
    FF_AddDialog "Dialog_FC",120,100
    FF_AddControl "Dialog_FC","Schriften:","STATIC",10,8,33,11
    FF_AddControl "Dialog_FC","Schriftwahl","FONT",10,20,100,10
    FF_AddControl "Dialog_FC","Farben:","STATIC",10,38,33,11
    FF_AddControl "Dialog_FC","Farbwahl","COLOR",10,50,100,10
    FF_AddControl "Dialog_FC","Ende","BUTTON",43,84,34,11
    '** End Dialog Dialog_FC **
    
    do
    	Select Case FF_ShowDialog ("Dialog_FC")	'Befehle abfragen und Dialog öffnen
    	Case "CANCEL"				'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_FC")	
    		FF_ErrorBreak "Abbruch"
    		exit do
    	Case "Ende"				'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    'Schrift- und Farbwert sichern
    Schrift = FF_GetControl ("Dialog_FC","Schriftwahl")
    Farbe = FF_GetControl ("Dialog_FC","Farbwahl")
    
    FF_CloseDialog ("Dialog_FC")			'Dialog schließen
    
    msgbox "Gewählt wurde" & vbNewLine & _
    	   "Schrift = " & Schrift & vbNewLine & _
    	   "Farbe = " & Farbe & vbNewLine & vbNewLine & _
    	   "Dialog ist beendet", vbOk, "Meldung"
    
    
    Das Ergebnis sieht so aus:

    [​IMG]

    Bei Ausführen des Skript werden in der Schriftenauswahl alle auf dem jeweiligen Rechner installierten Fonts angezeigt. Der Name der angeklickten Schrift wird bei FF_GetControl im Klartext zurück gegeben.
    Bei den Farben ist eine sehr differenzierte Auswahl bis zur Ermittlung einer bestehenden Farbe mit der Pipette möglich. Die Farbe wird als RGB-Wert ausgegeben.
     
    #16 Mecki14, 01.01.08
    Zuletzt bearbeitet: 22.10.08
  17. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    IMAGE
    Mit IMAGE können Bilder angezeigt werden.

    Im neuen Dialog_I1 erstellt man ein Steuerelement IMAGE von der Größe 150 x 150 mit Namen Bild. Es ist quadratisch, um hoch- und querformatige Bilder gleich gut anzeigen zu können. Darunter wird noch ein BUTTON Ende gesetzt.

    [​IMG]

    Mit FF_SetControl "Dialog_I1","Bild",wert kann jetzt ein Bild in das Steuerelement IMAGE übertragen werden, wobei wert ein Pfad auf ein Bild oder der Index des Stacks sein kann. Dabei entspricht 0 dem aktuellen Bild, was im folgenden Programmcode genutzt wird.

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_I1
    
    '** Start Dialog Dialog_I1 **
    FF_AddDialog "Dialog_I1",170,190
    FF_AddControl "Dialog_I1","Bild","IMAGE",10,10,150,150
    FF_AddControl "Dialog_I1","Ende","BUTTON",70,170,30,10
    '** End Dialog Dialog_I1 **
    
    if FF_GetImageWidth() = 0 then 
    	msgbox "Es wurde kein Bild geladen"
    	FF_ErrorBreak "Abbruch"
    end if
    
    FF_SetControl "Dialog_I1","Bild",0			'mit Wert 0 wird aktuelles Bild geladen
    
    do
    	Select Case FF_ShowDialog ("Dialog_I1")	'Befehle abfragen und Dialog öffnen
    	Case "CANCEL"				'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_I1")	
    		FF_ErrorBreak "Abbruch"
    		exit do
    	Case "Ende"				'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    FF_CloseDialog ("Dialog_I1")				'Dialog schließen
    msgbox "Dialog ist beendet"				'Meldung
    
    
    Vor der Übertragung wird geprüft, ob überhaupt ein Bild geladen ist. Dies geschieht durch Abfrage der Bildbreite (alternativ der Bildhöhe). Ist diese 0 steht logischerweise kein aktuelles Bild zur Verfügung.

    Oft will man mehrere Bilder in der Computeransicht markieren und diese sich mit einer Blätterfunktion nacheinander ansehen. Dazu wird ein Dialog_I2 wie der obige Dialog_1 angelegt, nur unten ergänzt um die zwei BUTTON <<< und >>> zum Rückwärts- und Vorwärtsblättern.

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_I2
    
    Option Explicit
    Dim BldAnzahl, BldNummer			'Bildanzahl und -nummer
    
    '** Start Dialog Dialog_I2 **
    FF_AddDialog "Dialog_I2",170,190
    FF_AddControl "Dialog_I2","Bild","IMAGE",10,10,150,150
    FF_AddControl "Dialog_I2","Ende","BUTTON",130,170,30,10
    FF_AddControl "Dialog_I2","<<<","BUTTON",25,170,30,10
    FF_AddControl "Dialog_I2",">>>","BUTTON",65,170,30,10
    '** End Dialog Dialog_I2 **
    
    BldAnzahl = FF_GetImageCount
    
    if BldAnzahl = 0 then 
    	msgbox "Es wurde kein Bild in der Computeransicht selektiert"
    	FF_ErrorBreak "Abbruch"
    end if
    
    'erstes (0) selektiertes Bild laden
    BldNummer = 0
    FF_LoadImage FF_GetImageName(BldNummer)
    FF_SetControl "Dialog_I2","Bild",0
    
    'Freigaben bzw. Sperren der Tasten <<< und >>>
    FF_EnableControl "Dialog_I2","<<<",false
    if BldAnzahl = 1 then FF_EnableControl "Dialog_I2",">>>",false
    
    'Befehlskontrolle
    do
    	Select Case FF_ShowDialog ("Dialog_I2")			'Befehle abfragen und Dialog öffnen
    	Case ">>>"
    		BldNummer = BldNummer+1
    		FF_LoadImage FF_GetImageName(BldNummer)		'Bild laden
    		FF_SetControl "Dialog_I2","Bild",0
    		'Freigaben bzw. Sperren der Tasten <<< und >>>
    		FF_EnableControl "Dialog_I2","<<<",true
    		if BldNummer = BldAnzahl-1 then FF_EnableControl "Dialog_I2",">>>",false
    	Case "<<<"
    		BldNummer = BldNummer-1
    		FF_LoadImage FF_GetImageName(BldNummer)		'Bild laden
    		FF_SetControl "Dialog_I2","Bild",0
    		'Freigaben bzw. Sperren der Tasten <<< und >>>
    		FF_EnableControl "Dialog_I2",">>>",true
    		if BldNummer = 0 then FF_EnableControl "Dialog_I2","<<<",false		
    	Case "CANCEL"						'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_I2")	
    		FF_ErrorBreak "Abbruch"
    		exit do
    	Case "Ende"						'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    FF_CloseDialog ("Dialog_I2")				'Dialog schließen
    msgbox "Dialog ist beendet"				'Meldung
    
    
    Hier wird erst einmal mit FF_GetImageCount geprüft, ob in der Computeransicht mindestens ein Bild markiert ist. Dann wird das erste Bild mit der Nummer 0 geladen und zum Steuerelement IMAGE übertragen.

    Um zu verhindern, dass mit den Tasten <<< und >>> unzulässige Werte erreicht werden können, werden diese mit FF_EnableControl frei gegeben oder gesperrt. Für den Benutzer sind diese Zustände sichtbar und machen damit deutlich, ob das Vor- bzw. Zurückblättern sinnvoll ist.

    [​IMG]
     
    #17 Mecki14, 04.01.08
    Zuletzt bearbeitet: 22.10.08
  18. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    HSLIDER und VSPIN
    Die beiden Elemente dienen der Zahlenvorgabe durch den Benutzer. HSLIDER ist ein Schieberegler mit dem man Zahlen zwischen 0 und 255 einstellen kann und VSPIN besteht aus zwei Pfeilen; mit dem oberen kann eine Zahl schrittweise erhöht und mit dem unteren schrittweise verringert werden.
    Beide Elemente machen nur Sinn, wenn ihm jeweils ein Textelement zugeordnet wird, am besten SLEDIT mit den gesetzten Stilen ES_RIGHT und ES_READONLY. Dies wird im folgenden Beispiel deutlich:

    In ein neues Dialogfeld Dialog_HV werden gesetzt:
    - ein GROUP-Element Spider
    - darin ein SLEDIT-Element AnzeigeH mit oben aufgeführten Eigenschaften und
    - ein HSLIDER, bezeichnet mit Horizontal
    - ein GROUP-Element Spin
    - darin ein SLEDIT-Element AnzeigeV mit oben aufgeführten Eigenschaften und
    - ein HSLIDER, bezeichnet mit Vertikal
    - ein BUTTON-Element Ende

    Im Dialogeditor sieht das wie folgt aus:

    [​IMG]

    Im Programmcode muss für beide Elemente erst ein Bezug zu den zugehörigen Textelementen hergestellt und mit FF_SetControl eine Voreinstellung vorgenommen werden.

    Beim Element HSLIDER
    die Voreinstellung: FF_SetControl "Dialog_HV","Horizontal",40 '40 als Beispiel
    die Zuordnung: FF_SetControlBuddy "Dialog_HV","Horizontal","AnzeigeH"

    Beim Element VSPIN:
    die Voreinstellung: WertV = 2 'über eine Variable 2 als Beipiel
    FF_SetControl "Dialog_HV","AnzeigeV",WertV
    die Zuordnung in der Befehlsschleife:
    Mit Anklicken eines der Pfeile wird ein Tastenbefehl ausgelöst, der bei Abfrage mit FF_GetControl einen Stringwert zurückgibt und zwar beim oberen Pfeil "1" und beim unteren Pfeil "-1". Dieser String gewandelt in eine Zahl, wird in der Variablen WertV aufaddiert. Der WertV wird dann mit FF_SetControl auf das Textelement AnzeigeV übertragen.

    Code:
    'FFSubmenu=Demo
    'FFName=Dialog_HV
    
    Option Explicit
    Dim WertV, SliderWert, SpinWert
    
    '** Start Dialog Dialog_HV **
    FF_AddDialog "Dialog_HV",120,100
    FF_AddControl "Dialog_HV","Slider","GROUP",7,3,106,42
    FF_AddControl "Dialog_HV","AnzeigeH","SLEDIT",55,11,30,10
    FF_SetControlStyle "Dialog_HV","AnzeigeH",2050
    FF_AddControl "Dialog_HV","Horizontal","HSLIDER",12,22,96,17
    FF_AddControl "Dialog_HV","Spin","GROUP",7,48,106,30
    FF_AddControl "Dialog_HV","Vertikal","VSPIN",34,55,17,18
    FF_AddControl "Dialog_HV","AnzeigeV","SLEDIT",55,59,30,10
    FF_SetControlStyle "Dialog_HV","AnzeigeV",2050
    FF_AddControl "Dialog_HV","Ende","BUTTON",45,85,30,10
    '** End Dialog Dialog_HV **
    
    FF_SetControl "Dialog_HV","Horizontal",40		'Vorbelegung des HSLIDER Horizontal
    FF_SetControlBuddy "Dialog_HV","Horizontal","AnzeigeH"	'Zuordnung des HSLIDER zu SLEDIT Anzeige H
    
    WertV = 2					'Vorbelegung des WertV
    FF_SetControl "Dialog_HV","AnzeigeV",WertV		'Anzeige des WertV
    
    do
    	Select Case FF_ShowDialog ("Dialog_HV")	'Befehle abfragen und Dialog öffnen
    	Case "Vertikal"
    		WertV = WertV + CInt(FF_GetControl ("Dialog_HV","Vertikal"))
    		FF_SetControl "Dialog_HV","AnzeigeV",WertV
    	Case "CANCEL"				'bei Cancel Abbruch des Skript
    		FF_CloseDialog ("Dialog_HV")	
    		FF_ErrorBreak "Abbruch"
    		exit do
    	Case "Ende"				'bei Ende Schleife verlassen
    		exit do
    	Case Else
    	End Select
    loop
    
    SliderWert = FF_GetControl ("Dialog_HV","AnzeigeH")	'Dialogwerte speichern
    SpinWert = FF_GetControl ("Dialog_HV","AnzeigeV")
    
    FF_CloseDialog ("Dialog_HV")			'Dialog schließen
    
    msgbox "Eingestellt wurde" & vbNewLine & _
    	   "Slider = " & SliderWert & vbNewLine & _
    	   "Spin   = " & SpinWert & vbNewLine & vbNewLine & _
    	   "Dialog ist beendet", vbOk, "Meldung"
    
    Wenn HSPIDER vom Benutzer betätigt wird, erscheint oben in der blauen Kopfzeile des Dialogfelds hinter dem Dialognamen die Anzeige des Namen und des Einstellwerts, abgetrennt durch zwei Doppelpunkte (z.B. Dialog_HV::Horizontal=123). Dies geschieht automatisch, verursacht durch die Dialogsoftware und ist nicht zu beeinflussen oder abzufragen.

    Natürlich können die Voreinstellwerte auf mathematischem Wege manipuliert werden.
    Wenn man beispielsweise das Element HSPIDER zur Einstellung eines JPEG-Faktors von 60 bis 100 verwenden will, muss das Ergebnis mit 40/255 + 60 multipliziert und in einen Integerwert umgewandelt werden. Leider gibt es keine Möglichkeit, dies während des Verstellens anzuzeigen und ist daher nicht sinnvoll anzuwenden.
    Beim VSPIN-Element bietet sich an, direkt beim Aufaddieren im WertV den Rückgabewert mit einem Faktor zu versehen, z.B. 0,25 (im Code natürlich Punkt statt Komma, also 0.25 einsetzen).
     
    #18 Mecki14, 07.01.08
    Zuletzt bearbeitet: 22.10.08
  19. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Zusammenfassung
    Die wichtigen Punkte zur Dialogerstellung allgemein und zu GROUP, BOOL, STATIC und BUTTON sind im Kapitel Zwischenbilanz bereits aufgeführt.

    Für die übrigen Steuerelemente ist folgendes zu merken:
    • EDIT erlaubt mehrzeiligen Text, SLEDIT (SingleLineEdit) nur einzeiligen Text.
    • Bei EDIT und SLEDIT gibt es viele, gut nutzbare Stile (siehe entsprechendes Kapitel)
    • Bei Steuerelementen des Typs COMBO und LISTBOX fügt jeder Aufruf von FF_SetControl (dialog,element,wert) der Liste einen weiteren Eintrag (wert) hinzu.
    • Wird ein Wert für COMBO und LISTBOX zweimal definiert, so wird er als Vorgabe selektiert.
    • Ein leerer String löscht die Liste bei COMBO und LISTBOX.
    • Ein IMAGE-Steuerfeld sollte immer quadratisch angelegt werden, um hoch- und querformatige Bilder gleich gut darstellen zu können.
    • Für IMAGE kann mit FF_SetControl (dialog,element,wert) als wert ein Pfad auf ein Bild oder der Index des Stacks angegeben werden, wobei 0 dem aktuellen Bild entspricht.
    • Bei FONT wird die ausgewählte Schrift im Klartext ausgegeben, bei COLOR erhält man den RGB-Wert der gewählten Farbe.
    • HSLIDER und VSPIN muss immer zusammen mit einem Textfeld eingesetzt werden
    • HSPIN muss mit dem dazugehörigen Textfeld über den Befehl FF_SetControlBuddy verbunden werden. Bei VSPIN muss ein Aufaddieren von Zahlenwerten (String erst in eine Zahl umwandeln) erfolgen, dessen Ergebnis anschließend in ein Textfeld übertragen wird.

    Noch ein Tipp:
    Alle Beispiele können schnell ausprobiert werden, indem jeweils der Programmcode aus der vorlie-genden Beschreibung kopiert und in den FFSkript-Editor eingefügt wird. Bei Betätigung der Taste Ausführen wird dann das Beispielskript gestartet.
    Wenn man will, kann man bei dieser Gelegenheit das Skript auch unter einem beliebigen Namen abspeichern und mit der Automatischen Konfiguration ein Eintrag der Kategorie Demo mit Dialognamen in der Skriptliste erzeugt werden.
     
    #19 Mecki14, 07.01.08
    Zuletzt bearbeitet: 07.01.08
  20. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.455
    Zustimmungen:
    19
    AW: Anleitung für FixFotos Skript-Dialogeditor

    Das war das letzte Kapitel und "ich habe fertig".
    Gibt es noch Korrekturanmerkungen, Ergänzungs- oder Verbesserungsvorschläge?
    Die würde ich dann noch gerne verarbeiten vor einer Veröffentlichung als PDF-Datei.
     

Diese Seite empfehlen