OBS/Makros und Scripting/Anwendungsbereiche/Customize Listen

Aus OBS Wiki
Version vom 23. Oktober 2024, 19:28 Uhr von Thiel (Diskussion | Beiträge) (→‎Beispiele Liste)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


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;
SQL-Statement bei SUch-LISten (SULIS) überschreiben
function OnListShow():string;
begin
    if frmListe.aTabel[0] = 'PROJEKTE_TYP' then begin
        frmListe.ListWhere := 'Left(pt_nr,1) <> 9';
    end;
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.