Formeditor Delphiscriptfrage

Alle Fragen rund Antworten rund um die ACMP Client Commands und Container
Antworten
BarthMetall
Beiträge: 24
Registriert: Mo Aug 03, 2020 2:30 pm

Moin Moin,

ich versuche im Formeditor eine Liste von Druckerobjekten anzeigen zu lassen.
Dazu habe ich per WMI Abfrage (Select Caption,Drivername from Win32_Printer) eine Liste mit Druckername und Treiber in die Projektvariable DRUCKERLISTE geladen.

Ich kann im Formeditor auch auf die Attribute per GetVarContent('DRUCKERLISTE.Caption'); bzw. GetVarContent('DRUCKERLISTE.Drivername'); zugreifen, aber immer nur auf den ersten Drucker in der Liste.
Und so kann ich leider keine Liste aufbauen z.B. Listbox1.items.add(GetVarContent('DRUCKERLISTE.Caption'));
Auch ein Versuch mit Listbox1.items.add(GetVarContent('DRUCKERLISTE[counter].Caption')); und Listbox1.items.add(GetVarContent('DRUCKERLISTE.Caption[counter]')); war erfolglos.

Weis jemand, wie ich a) die Anzahl der Elemente der Variable DRUCKERLISTE ermittle und b) wie ich auf die Attribute der einzelnen Elemente in DRUCKERLISTE zugreifen kann.

Schönes Wochenende
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Moin,

über das folgende Script kann eine ListBox1 mit den Werten aus der ACMP Variable "Druckerliste" befüllt werden,
die Einträge in der Liste sind in dem Format:

CAPTION=Drucker1,DRIVERNAME=Driver1
CAPTION=Drucker2,DRIVERNAME=Driver2
usw.

Code: Alles auswählen

procedure Button1Click(Sender: TObject);
var
  lList,lTemp : TStringList;
  i : Integer; 
begin
  lList := TStringList.Create();
  lTemp := TStringList.Create();
  lList.Text := GetVarContent('DRUCKERLISTE');
  ListBox1.Items.Clear();
  for i := 0 to lList.Count -1 do 
  begin
    lTemp.Commatext := lList.Strings[i];    
    ListBox1.Items.Add(lTemp.Values['Caption'] + ' | ' + lTemp.Values['DRIVERNAME']);            
  end;
  lList.Free();
  lTemp.Free();
end;
Antwort zu Frage a)
In dem Skript kann die Anzahl der Einträge über lList.Count ermittelt werden.

Antwort zu Frage b)
Die Listeneinträge werden in der Schleife iteriert, dabei wird die jeweilige Zeile in eine Temporäre Stringlist übergeben (lTemp.Commatext).
Mit dem Commatext kann dann auf die Values (Caption, Drivername) zugegriffen werden.
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
BarthMetall
Beiträge: 24
Registriert: Mo Aug 03, 2020 2:30 pm

Vielen Dank für die Antwort.

Leider erscheint in der Listbox1 trotzdem nur der erste Drucker aus der DRUCKERLISTE.

Ich hab mal die For Schleife auf den fixen Wert 10 gesetzt um zu sehen ob es doch weitere Einträge in lList gibt, aber es kommt sofort ein "Listenindex ausserhalb des gültigen Bereichs.
Also wird in lList.Text := GetVarContent('DRUCKERLISTE'); immer nur der erste Eintrag übergeben und nicht alle.
Benutzeravatar
JDoering
Beiträge: 89
Registriert: Mo Dez 15, 2008 3:45 pm

Hallo,

ich habe hier ein Beispiel Command (ACMP Version 5.4.12), in dem genau dieser Aufruf vorgenommen wird.
Jens Döring
Senior IT Support Engineer

support@aagon.com
http://www.aagon.de

Aagon GmbH
Lange Wende 33
D-59494 Soest
fon: +49-2921-789-200
fax: +49-2921-789-244
BarthMetall
Beiträge: 24
Registriert: Mo Aug 03, 2020 2:30 pm

OK, so langsam wirds heller und ich verstehe wie die Variablen in Arrays funktionieren.

Problem 1 (nur ein Eintrag vorhanden) lag an der Art wie ich die Werte aus der WMI Abfrage gespeichert hatte. Der geht auf meine Kappe. :D

Problem 2 (10 Einträge in der Liste aber in echt nur 5 Drucker aus der WMI Abfrage) liegt an einem Bug in "Projektvariable setzen"
Sobald man dieses Command nochmal Editiert (man braucht noch nicht mal was zu ändern) und speichert, wird ein zusätzliches CR an den Mehrzeiligen Text angehängt.
Für euch zu ausprobieren habe ich das CC hier angehängt.
War etwas kniffelig und !!!! ACHTUNG Verbesserungsvorschlag !!! mit einem Debugger im Formeditor vermutlich innerhalb von 5 Minuten gelöst.
Aber dank euerer Hilfe passt es jetzt.

btw. Debugger, Objectbrowser und Co. helfen nicht nur Fehler zu finden. Sie sind auch eine Megahilfe um die Eigenheiten der Sprache zu lernen.
Für mich sind die CCs unendlich wertvoll um meinen Arbeitstag von Anrufen mit Standardproblemen zu entlasten und meine User automatisiert zu befriedigen. :mrgreen:
Antworten