OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{{Makros und Scripting}} ==Methoden der Eingabemaske== Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine List…“)
 
(16 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Makros und Scripting}}
{{Makros und Scripting}}


==Methoden der Eingabemaske==
==Methoden der Liste==
Für die Customize-Scripte stehen Ihnen diverse Funktionalitäten zur Verfügung. Nachfolgend eine Liste aller Customize-Funktionen der Maske:
{| class="wikitable"
{| class="wikitable"
|-
|-
!Interne Funktionen !! Tastatur-Funktionen
!Interne Funktionen  
|-
|-
|OnEdFormInit || OnF1
|OnListNew
|-
|-
|OnEdInit || OnF2
|OnResize
|-
|-
|OnEdVorb || OnF3
|OnRefresh
|-
|-
|OnEdShow || OnF4
|OnShowColor(cFeld:String)
|-
|-
|OnEdStable || OnF5
| OnStable
|-
|-
|OnEdReadDirect || OnF6
|OnCreate
|-
|-
|OnEdRead || OnF7
|OnClose
|-
|-
|OnEdStable || OnF8
|OnVisible
|}
{| class="wikitable"
|-
|-
|OnEdCheck || OnF9
! Tastatur-Funktionen
|-
|-
|OnEdqSQL || OnF10
| OnF1
|-
|-
|OnEdSaveDirect || OnF11
| OnF2
|-
|-
|OnEdSave || OnF12
| OnF3
|-
|-
|CheckIfChanged || OnPGDN
| OnF4
|-
|-
|OnEdClose || OnPGUP
| OnF5
|-
|-
| || OnReturn
| OnF6
|-
|-
| || OnESC
| OnF7
|}
Die hier aufgeführten '''internen Funktionen''' sind in der Reihenfolge aufgelistet, wie sie vom OBS beim Öffnen (OnEdFormInit bis OnEdStable) und Schließen (OnEdCheck bis OnEdClose) von Eingabemasken auch abgearbeitet werden.
{{Hinweis|Bei der Verwendung der Funktionen in Customize-Scripten ist die Reihenfolge der Abarbeitung der Masken-Funktion und der Customize-Funktion von Bedeutung. Grundsätzlich gilt: Interne Funktionen werden vor dem Customize ausgeführt und Tastatur-Funktionen nach der Customize-Funktion. Um ein Customize vor der internen Funktion auszuführen, muss dem Funktionsnamen der Präfix '''Before_''' gegeben werden. Für Tastatur-Funktionen gilt dies nur für '''OnESC'''.}}
==Zugriff auf Komponenten==
Um auf Komponenten der Maske zuzugreifen, sollten Sie die Funktionen '''xGet''' (Daten lesen) und '''xSet''' (Daten schreiben) verwenden.
<syntaxhighlight lang="Delphi">
//Auslesen einer Komponente
cName := FrmEdit.xGet('a_name');
//Setzen einer Komponente
FrmEdit.xSet('a_name',"Meier");
</syntaxhighlight>
 
==Globale Variablen der Eingabemaske==
Über die Variable FrmEdit kann auf alle Felder und auf die Property des Edit Objekt zugegriffen werden. Folgende Property's stehen zu Verfügung:
{| class="wikitable"
|-
!Property !! Erläuterung
|-
|-
|lCheckOK || Kann bei der Überprüfung von F2 benutzt werden ob die Eingabewerte korrekt eingegeben wurden sind. Bei False wird nicht abgespeichert.
| OnF8
|-
|-
|lEditMode || True  = Insertmodus False = Editmodus
| OnF9
|-
|-
|lDataUpdate || True = Daten des Edits wurden verändert
| OnF10
|-
|-
|lDataChecked || False=Daten werden auf gültigkeit überprüft (lCheckok)
| OnF11
|-
|-
|lCloseInsert || Edit-Fenster wird (lEditMode = True) nach F2 geschlossen
| OnF12
|-
|-
|lCloseEdit || Edit-Fenster wird (lEditMode = False) nach F2 geschlossen
| OnReturn
|-
|-
|lDataESC || Soll bei einer Änderung im Edit eine Abfrage beim Verlassen der Maske erscheinen
| OnInsert
|-
|-
|lCanLock || Ob bei der Eingabe nur eine Person den Datensat editieren darf
| OnDelete
|-
|-
|lInsert || Edit Felder im Insert/Überschreibemodus (zur zeit keine Funktion)
| OnESC
|}
|}
==Beispiele Eingabemaske==
 
===Button F12 anzeigen und mit Funktionalität versehen===
==Beispiele Liste==
<syntaxhighlight lang="Delphi">
{{Vorlage:KlapptextFAQ
function OnEdInit():string;
|liste_F12
|Button F12 anzeigen und mit Funktionalität versehen
|<syntaxhighlight lang="Delphi">
function OnListNew():string;
begin
begin
     frmEdit.cmdF12.Enabled := True;
     frmListe.cmdF12.Enabled := True;
     frmEdit.cmdF12.Caption := 'F12 Test';
     frmListe.cmdF12.Caption := 'F12 Test';
     frmEdit.InitButtons(frmEdit);
     frmListe.InitButtons(frmListe);
     frmEdit.PaintButtons(frmEdit);  
     frmListe.PaintButtons(frmListe);  
end;                        
end;            
     
 
procedure OnF12();   
procedure OnF12();   
begin                           
begin                           
     Meldung('Test');
     Meldung('Test');
end;      
end;  
</syntaxhighlight>
</syntaxhighlight>
}}


===Aufruf von weiteren Macros innerhalb des Macros===
{{Vorlage:KlapptextFAQ
<syntaxhighlight lang="Delphi">
|liste_Disable
function OnEdInit():string;
|Button F4 ausblenden
|<syntaxhighlight lang="Delphi">
function OnListNew():string;
begin
begin
     frmEdit.cmdF12.Enabled := True;
     frmListe.cmdF4.Enabled := False;
    frmEdit.cmdF12.Caption := 'F12 Test';
end;             
    frmEdit.InitButtons(frmEdit);
</syntaxhighlight>
     frmEdit.PaintButtons(frmEdit);  
}}
end;                        
 
     
{{Vorlage:KlapptextFAQ
procedure OnF12()
|liste_buttons
var oParams: TStringlist; //Parameter für Aufruf
|Andere Buttons Mit Funktion versehen
|<syntaxhighlight lang="Delphi">
Var cMyF8 : String;
                         
function OnListNew():String;
begin                       
    cMyF8  := 'Init';  
     Result := '';
end;
 
function OnF8():string;
begin
begin
     //Aufruf ohne Parameter
     Meldung('Hallo '+cMyF8);   
     RunMacroFile('data\MACRO\Spezial\Test123.pmac');
     Result := 'OK';
end;  


    //Aufruf mit Parameter
function Before_OnF8():String;
    oParams := TStringlist.Create;
begin
     oParams.Add('TEST456');    
     Meldung('Before Hallo '+cMyF8);
     RunMacroFile('data\MACRO\Spezial\Test123.pmac', frmEdit, oParams);
      
     MyFreeAndNil(oParams);
    //Dann wird Standard F8 nicht ausgeführt
end;      
    Result := 'READY';  
     cMyF8  := Result;
end;  
</syntaxhighlight>
</syntaxhighlight>
}}
{{Vorlage:KlapptextFAQ
|liste_F12_Auswahl
|Button F12 mit Auswahlfunktion
|<syntaxhighlight lang="Delphi">
function OnListNew():string;
begin
    frmListe.cmdF12.Enabled := True;
    frmListe.cmdF12.Caption := 'F12 Test';
    frmListe.InitButtons(frmListe);
    frmListe.PaintButtons(frmListe);   
end;                                                 


===Eingaben prüfen===
procedure OnF12();     
<syntaxhighlight lang="Delphi">
var oLines  : TStringList;
function OnEdCheck():string;
     oResult : TStringList;          
var oSte     : TEdit;
     lEsc   : Boolean;
     cEdit   : String;
     cSelect : String;
     cVorname : String;
begin
begin
     if (FrmEdit.lEditMode) then begin
     oLines := TStringList.Create();   
        Meldung('Edit Mode True');
    oLines.Add('A - Test 1');
     end else begin
     oLines.Add('B - Test 2');
        Meldung('Edit Mode False');
     oLines.Add('C - Test 3');
     end;
      
     Meldung(FrmEdit.stred_db_a_name.Text);
     oResult := GetSelectionExt(oLines, //Auswahl
     oSte := FrmEdit.FindComponent('stred_db_a_name');
                              'Test', //Caption       
     Meldung(oSte.Text);
                              lEsc,  //Abruch? (var)           
     cVorname:= FrmEdit.xGet('a_vorname');
                              Nil,    //uInit : DefGetSelection;
     Meldung(cVorname);
                              Nil,    //uOnChange : DefGetSelection; 
     if (Empty(cVorname)) then begin
                              False,  //Sort     
        FrmEdit.lCheckOk := False;
                              -1,    //Width
         Meldung('Bitte Vorname eingtragen');
                              False,  //MultiSel   
     end;
                              False  //AllLines
                              );  
      
    cSelect := LeftStr(oResult.Text, 1);
                                               
     if          (cSelect = 'A') then begin
        Meldung('A');
     end else if (cSelect = 'B') then begin
        Meldung('B');
     end else if (cSelect = 'C') then begin
         Meldung('C');
     end
                               
    MyFreeAndNil(oLines);
    MyFreeAndNil(oResult);
end;
end;
</syntaxhighlight>
</syntaxhighlight>
}}


===Positionen in Vorgängen blockieren===
{{Vorlage:KlapptextFAQ
Mit dem folgendem Beispiel kann entschieden werden ob Positionen eines Vorgangs geöffnet werden sollen.
|OnShowColor
|Mit OnShowColor benutzerdefinierte Farben in Listenfeldern
|<syntaxhighlight lang="Delphi">


Name: AN_VORGANG_EDIT Function OpenClose
procedure OnShowColor(cFeld: String);
{{Hinweis| Der Prefix "AN" steht für den DMS-Typ Angebot. Eine Übersicht aller DMS-Typen finden Sie [[OBS/Makros und Scripting/Developer/Sonstiges/DMS Abkürzungen|hier]].}}
 
<syntaxhighlight lang="Delphi">
function OpenClose(cVgNr:String; lInsertMode:Boolean):Boolean;
begin
begin
  //DebugLine('cVgNr'+cVgNr);


     //02 = Möbel
     //Farbe des gesamten Textes setzt
     Result := oOBS.cBenutzergruppe <> '02';
    //Je nach Status der Zeile im Grid eine andere Textfarbe nutzen:
    //gdSelected, gdFocused, gdFixed, gdRowSelected, gdHotTrack, gdPressed
    if (gdSelected    in frmListe.CurState) then begin
        //die aktuelle selektierte Zeile in Gelb
        frmListe.DBGrid.Canvas.Font.Color := TObsColor.Yellow;
     end else begin
        frmListe.DBGrid.Canvas.Font.Color := TObsColor.Inactive;
    end;
      
      
     if (Result) then begin
    //Je nach Priorität das Feld einfärben
         //Wenn Positionen vorhanden dann kein Positions-Edit
     if (Upper(cFeld) = 'T_PRIO') then begin
         if (DB_LSeek(oDB,'ANGPOS','az_nr='+DB_SqlVal(cVGNr))) then begin
        //Folgende Farb Konstanten stehen zur Verfügung
             Result := False;
        //*_Comp repräsentieren jeweils die Komplementärfarben
        end;
        //TObsColor.White
    end;
        //TObsColor.White_Comp
                         
        //TObsColor.Red
    if (Result) then begin
        //TObsColor.Red_Comp
               
        //TObsColor.Red_Text
         //DebugLine(iif(lInsertMode,'True','False'));
        //TObsColor.Red_Text_Hi
       
        //TObsColor.Green
         //Bei nicht Insert immer False
        //TObsColor.Green_Comp
         if (lInsertMode = False) then begin
        //TObsColor.Green_Text
             Result := False;
        //TObsColor.Green_Text_Hi
        //TObsColor.Yellow
        //TObsColor.Yellow_Comp
        //TObsColor.Alert
        //TObsColor.Alert_Comp
        //TObsColor.Inactive
        //TObsColor.Inactive_Comp
        //TObsColor.Inactive_Hi
        //TObsColor.Black
        //TObsColor.Blue
        //TObsColor.Blue_Comp
        //TObsColor.Dark_Blue
        //TObsColor.Dark_Blue_Comp
        //TObsColor.Light_Text
        //TObsColor.InfoBlock
 
         //Wenn die gewünschte Farbe fehlt, kann dies per Hexadezimal wert dargestellt werden
 
        //Hoch
         if frmListe.Query.A2C('t_prio') = '1' then begin
             frmListe.DBGrid.Canvas.Brush.Color := TObsColor.red;
            //Komplementärfarbe
            frmListe.DBGrid.Canvas.Font.Color  := TOBSColor.red_Comp;
         //Normal       
        end else if frmListe.Query.A2C('t_prio') = '2' then begin
            frmListe.DBGrid.Canvas.Brush.Color := $73f601;
            frmListe.DBGrid.Canvas.Font.Color  := $000000;
         //Niedrig
         end else begin
            frmListe.DBGrid.Canvas.Brush.Color := TObsColor.Inactive_Comp;
             frmListe.DBGrid.Canvas.Font.Color  := TObsColor.Inactive;
         end;
         end;
        frmListe.DBGrid.Canvas.Fillrect(frmListe.CurRect);
     end;
     end;
   
end;
end;
</syntaxhighlight>
</syntaxhighlight>
}}{{Vorlage:KlapptextFAQ
|liste_Resturn|Button Return und Doppelklick deaktivieren
|<syntaxhighlight lang="Delphi">
function Before_OnReturn():string;
begin
    Meldung('nicht erlaubt');
    Result := 'Ready'
end;             
</syntaxhighlight>
}}
== Weitere Funktionen ==
[[Datei:Weitere Funktionen.png|rahmenlos]]
Um die Menüpunkte unter ''Weitere Funktionen'' zu bearbeiten, kann auf diese Liste mit STRG + {{MouseRight1}} geklickt werden, woraufhin sich ein Customize Menü öffnet. Hier können einzelne Funktionen deaktiviert werden.
==Besonderheiten==
{{Hinweis|Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix '''Before_'''.}}
{{Achtung|Wird bei den '''Before_'''-Funktionen "READY" zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!}}
{{Achtung|Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.}}

Aktuelle Version vom 17. Mai 2023, 09:19 Uhr


Methoden der Liste

Interne Funktionen
OnListNew
OnResize
OnRefresh
OnShowColor(cFeld:String)
OnStable
OnCreate
OnClose
OnVisible
Tastatur-Funktionen
OnF1
OnF2
OnF3
OnF4
OnF5
OnF6
OnF7
OnF8
OnF9
OnF10
OnF11
OnF12
OnReturn
OnInsert
OnDelete
OnESC

Beispiele Liste

Button F12 anzeigen und mit Funktionalität versehen
function OnListNew():string;
begin
    frmListe.cmdF12.Enabled := True;
    frmListe.cmdF12.Caption := 'F12 Test';
    frmListe.InitButtons(frmListe);
    frmListe.PaintButtons(frmListe);    
end;              

procedure OnF12();  
begin                          
    Meldung('Test');
end;
Button F4 ausblenden
function OnListNew():string;
begin
    frmListe.cmdF4.Enabled := False;  
end;
Andere Buttons Mit Funktion versehen
Var cMyF8 : String;
                           
function OnListNew():String; 
begin                         
    cMyF8  := 'Init'; 
    Result := '';
end;  

function OnF8():string;
begin
    Meldung('Hallo '+cMyF8);     
    Result := 'OK';
end; 

function Before_OnF8():String;
begin
    Meldung('Before Hallo '+cMyF8);
    
    //Dann wird Standard F8 nicht ausgeführt
    Result := 'READY'; 
    cMyF8  := Result;
end;
Button F12 mit Auswahlfunktion
function OnListNew():string;
begin
    frmListe.cmdF12.Enabled := True;
    frmListe.cmdF12.Caption := 'F12 Test';
    frmListe.InitButtons(frmListe);
    frmListe.PaintButtons(frmListe);    
end;                                                  

procedure OnF12();      
var oLines  : TStringList;
    oResult : TStringList;            
    lEsc    : Boolean;
    cSelect : String;
begin
    oLines := TStringList.Create();    
    oLines.Add('A - Test 1');
    oLines.Add('B - Test 2');
    oLines.Add('C - Test 3');
    
    oResult := GetSelectionExt(oLines, //Auswahl 
                               'Test', //Caption        
                               lEsc,   //Abruch? (var)            
                               Nil,    //uInit : DefGetSelection;
                               Nil,    //uOnChange : DefGetSelection;   
                               False,  //Sort      
                               -1,     //Width
                               False,  //MultiSel     
                               False   //AllLines 
                               ); 
    
    cSelect := LeftStr(oResult.Text, 1);
                                                 
    if          (cSelect = 'A') then begin
        Meldung('A');
    end else if (cSelect = 'B') then begin
        Meldung('B');
    end else if (cSelect = 'C') then begin
        Meldung('C');
    end;   
                                 
    MyFreeAndNil(oLines);
    MyFreeAndNil(oResult);
end;
Mit OnShowColor benutzerdefinierte Farben in Listenfeldern
procedure OnShowColor(cFeld: String);
begin

    //Farbe des gesamten Textes setzt
    //Je nach Status der Zeile im Grid eine andere Textfarbe nutzen: 
    //gdSelected, gdFocused, gdFixed, gdRowSelected, gdHotTrack, gdPressed
    if (gdSelected    in frmListe.CurState) then begin
        //die aktuelle selektierte Zeile in Gelb
        frmListe.DBGrid.Canvas.Font.Color := TObsColor.Yellow;
    end else begin
        frmListe.DBGrid.Canvas.Font.Color := TObsColor.Inactive;
    end;
    
    //Je nach Priorität das Feld einfärben
    if (Upper(cFeld) = 'T_PRIO') then begin
        //Folgende Farb Konstanten stehen zur Verfügung
        //*_Comp repräsentieren jeweils die Komplementärfarben
        //TObsColor.White
        //TObsColor.White_Comp
        //TObsColor.Red
        //TObsColor.Red_Comp
        //TObsColor.Red_Text
        //TObsColor.Red_Text_Hi
        //TObsColor.Green
        //TObsColor.Green_Comp
        //TObsColor.Green_Text
        //TObsColor.Green_Text_Hi
        //TObsColor.Yellow
        //TObsColor.Yellow_Comp
        //TObsColor.Alert
        //TObsColor.Alert_Comp
        //TObsColor.Inactive
        //TObsColor.Inactive_Comp
        //TObsColor.Inactive_Hi
        //TObsColor.Black
        //TObsColor.Blue
        //TObsColor.Blue_Comp
        //TObsColor.Dark_Blue
        //TObsColor.Dark_Blue_Comp
        //TObsColor.Light_Text
        //TObsColor.InfoBlock

        //Wenn die gewünschte Farbe fehlt, kann dies per Hexadezimal wert dargestellt werden

        //Hoch
        if frmListe.Query.A2C('t_prio') = '1' then begin
            frmListe.DBGrid.Canvas.Brush.Color := TObsColor.red;
            //Komplementärfarbe
            frmListe.DBGrid.Canvas.Font.Color  := TOBSColor.red_Comp;
        //Normal        
        end else if frmListe.Query.A2C('t_prio') = '2' then begin
            frmListe.DBGrid.Canvas.Brush.Color := $73f601;
            frmListe.DBGrid.Canvas.Font.Color  := $000000;
        //Niedrig
        end else begin
            frmListe.DBGrid.Canvas.Brush.Color := TObsColor.Inactive_Comp;
            frmListe.DBGrid.Canvas.Font.Color  := TObsColor.Inactive;
        end;
        frmListe.DBGrid.Canvas.Fillrect(frmListe.CurRect); 
    end;
end;
Button Return und Doppelklick deaktivieren
function Before_OnReturn():string;
begin
    Meldung('nicht erlaubt');
    Result := 'Ready' 
end;

Weitere Funktionen

Weitere Funktionen.png Um die Menüpunkte unter Weitere Funktionen zu bearbeiten, kann auf diese Liste mit STRG + Key mouse5.gif geklickt werden, woraufhin sich ein Customize Menü öffnet. Hier können einzelne Funktionen deaktiviert werden.

Besonderheiten

HINWEIS: Sämtliche Tastatur-Funktionen haben noch eine Variante mit dem Präfix Before_.
ACHTUNG: Wird bei den Before_-Funktionen "READY" zurückgegeben, so werden die internen Funktionen nicht mehr ausgeführt. Damit kann der natürliche Ablauf des Programmes verändert werden. Dies kann schwere Programmfehler verursachen!
ACHTUNG: Das Überschreiben von nicht zugewiesenen Funktionstasten (F1 - F11) sollte vermieden werden, da diese von uns jederzeit mit Funktionen belegt werden können. F12 steht immer zur Verfügung.