Antwort auf: Datagrid – auslesen

Startseite Foren Deutsches LiveCode-Forum Datagrid – auslesen Antwort auf: Datagrid – auslesen

#5051
Klaus Major
Administrator

    Hallo Andreas,

    Hinweis: Auf Grund langjähriger Tätigkeit als Musiker und Softwareentwickler bin ich ein nachtaktives Wesen geworden! 🙂

    OK, weiter gehts…

    In meinem Beispiel hier verwende ich den Namen „Eingabe“ für das Feld, in dem der User Artikelnummer oder Bezeichnung eingibt und den Namen „list“, den Du bereits verwendet hast, für das „Hilfsfeld“, das unter dem Eingabefeld auftauchen soll.

    Das Feld „list“ ist zunächst einmal nicht sichtbar, wir lassen es auftauchen, wenn der User seine Eingabe macht.

    Um effektiv, und somit schnell, zu arbeiten, werden wir meine Funktion nur EINMAL nutzen und den Rückgabewert irgendwo zwischenspeichern.

    Das machen wir aber nicht in einer lokalen oder globalen Variablen, sondern in einer Custom Property des Feldes „list“.

    Eine Property ist ja sowas wie height, width etc. eines LC Objektes, das sind die „eingebauten“ Properties.

    „Custom Properties“ sind nun Properties, die nicht eingebaut sind und die wir selber definieren.

    Stell Dir das ungefähr so vor wie eine Variable, die aber weder lokal noch global ist, sondern an ein LC Objekt „angetackert“ ist.

    Das hat den Vorteil, daß sie mit dem Stack gespeichert wird, wenn wir den Stack speichern sollten. Das hat in unserem Fall keine Bedeutung, ist aber unbedingt wissenswert!

    Jedes LC Objekt kann eine oder auch mehrere CPs enthalten, ja sogar Custom Property Sets, was sowas wie ein Array ist, aber das nur am Rande…

    Wir können Custom Properties benennen, wie wir auch Variablen benennen würden, also immer EIN Wort.

    Ich verwende immer ein kleines C am Anfang des Namens, um schon aus der Ferne zu sehen, daß es eine CP ist und keine Variable.

    Setzen und Abfragen von CPs:

    set the cLieblingsFarbe of stack „mein Stack“ to „blau“
    ## MitWerten füllen IMMER mit SET, put funktioniert hier nicht!

    answer the cLieblingsFarbe of stack „mein Stack“
    ## -> blau

    OK, kommen wir nun zum Skript vom Feld „Eingabe“:

    on openfield
       ## User hat in das Feld geklickt, nun geht es los:
       ## Zunächst speichern wir die benötigten Infos aus dem Datagrid in einer CP des Feldes "list", 
       ## um später schneller darauf zugreifen zu können
       set the cTempDaten of fld "list" to artikel_aus_datagrid()
       
       ## Aufräumen (Feld leeren) ist auch eine gute Idee, aber optional:
       put empty into me
    end openfield
    
    ## Nun müssen wir die Eingabe(n) des user prüfen und im Feld "list" alle Zeilen anzeigen
    ## die den eingegebenen String (= Zeichenkette = ein oder mehrere Buchstaben) enthalten.
    ## Das machen wir mit FILTER und Platzhaltern (wildcards), die KEINE oder einen oder mehrere 
    ## unbekannte Buchstaben repräsentieren. Dazu nutzen wir den Asterisk, also das Zeichen über 
    ## dem PLUS-Zeichen auf der Tastatur: *
    ## Beispiel mit einer mehrzeiligen Variable namens el_testo:
    ## filter el_testo with "eins*"
    ## zeigt uns alle Zeilen an, sofern vorhanden, die mit eins ANFANGEN, egal ob dahinter 
    ## noch was kommt oder nicht
    ## filter el_testo with "*eins"
    ## zeigt uns alle Zeilen an, sofern vorhanden, die mit eins ENDEN, egal ob davor noch...
    ## filter el_testo with "*eins*"
    ## zeigt uns alle Zeilen an, sofern vorhanden, die mit eins ANFANGEN, den String 
    ## IRGENDWO in der Zeile ENTHALTEN oder mit eins ENDEN.
    
    ## Und das machen wir nachdem der User etwas eingegeben hat, also -> on keyup der_eingebene_buchstabe
    ## Den Parameter benötigen wir hier aber nciht.
    on keyup tKey
       ## Den gesamten bereits eingegebenen Text des Felds abgreifen:
       put me into SuchString
       
       ## Nun die gespeicherte CP in eine Variable packen und darin FILTERn
       put the cTempDaten of fld "list" into AlleDaten
       
       ## Text des Feldes mit WILDCARD vorne und hinten
       filter AlleDaten with ("*" & SuchString & "*")
       
       ## Prüfen, ob es passende Daten gibt, wenn nicht, BEEPen oder so, 
       ## damit der user das auch mitbekommt.
       if AlleDaten = EMPTY then
          ## Nichts gefunden
          beep
          
          ## Nun den Handler verlassen
          exit keyup      
       end if
       
       ## Wir haben also etwas gefunden, nun dem User auch anzeigen
       put AlleDaten into fld "list"
       
       ## Feld könnte noch versteckt sein:
       if the visible of fld "list" = FALSE then
          show fld "list"
       end if
    end keyup

    Nun das Skript für das LIST-Feld „list“

    on mousedoubleup
       ## Den angeklickten/ausgewählten Text ins Feld "Eingabe" oder wohin auch immer schreiben
       put the selectedtext of me into fld "Eingabe"
       
       ## Fertig, nun Tschüss, mein Listenfeld:
       hide me
    end mousedoubleup

    Fertig, bitte mal ausprobieren und verstehen, bei Bedarf wieder nachfragen.
    Und bitte immer alle unbekannten Begriffe im DICTIONARY nachschlagen!

    Gruß

    Klaus