TMS TAdvOutlooklist (Teil 2)

2. Teil meiner Serie zur TAdvOutlookList von TMS Software.

Dieser Teil befasst sich mit dem Suchen oder Ermitteln von Einträgen, die in einer TAdvOutlook – Liste erfasst sind.
Drei Funktionen werden dabei vorgestellt:

  • Liste aller Einträge innerhalb Ihrer AdvOutlooklist ermitteln
  • Spaltenwerte an einer bestimmten Position ermitteln
  • Einen bestimmten Texteintrag suchen

Liste aller Einträge innerhalb Ihrer AdvOutlooklist ermitteln

Das folgende Beispiel ermittelt die Liste aller Einträge auch über mehrere Gruppen hinweg und legt den Wert der Spalte (also Spalten[0] im Beispiel, was der 1. Spalte entspricht) in einer Listbox ab.

procedure TForm1.AdvGlowButton1Click(Sender: TObject);
var i,z:Integer; spalten:TStrings;
begin
ListBox1.Items.clear;
if AdvOutlookList1.GroupCount>0 then
begin
for i := 0 to AdvOutlookList1.GroupCount-1 do
begin
if AdvOutlookList1.Groups[i].ChildCount>0 then
begin
for z := 0 to AdvOutlookList1.Groups[i].ChildCount-1 do
begin
spalten:=AdvOutlookList1.Groups[i].ChildItem[z];
ListBox1.Items.Add(spalten[0])
end;
end;
end;
end;
end;

AdvOutlookList1.GroupCount ermittelt die Anzahl der Gruppen
AdvOutlookList1.Groups[i].ChildCount ermittelt die Anzahl der Einträge innerhalb einer Gruppe
AdvOutlookList1.Groups[i].ChildItem[z] ermittelt alle Spaltenwert und legt es in eine TStrings-Variable ab, über diese kann man mit dem entsprechenden SpaltenIndex auf der Inhalt der jeweiligen Spalte zugreifen, z.B. also mit Spalten[0] auf den entsprechenden Wert der 1. Spalte (Delphi beginnt ja mit 0 zu zählen).

Spaltenwerte an einer bestimmten Position ermitteln

Folgende Funktion ermittelt einen bestimmten Spaltenwert der angegebenen Zeile innerhalb der von Ihnen gewünschten Gruppe:

function TForm1.GetSpaltenWert(intGruppe,intZeile,intSpalte:Integer):String;
var spalten:TStrings;
begin
if (intGruppe>AdvOutlookList1.GroupCount)or
(intZeile>AdvOutlookList1.Groups[intGruppe-1].ChildCount) or
(intSpalte>AdvOutlookList1.Columns.Count) then
exit(‚-1‘);
spalten:=AdvOutlookList1.Groups[intGruppe-1].ChildItem[IntZeile-1];
result:=spalten[IntSpalte-1];
end;

Der Block:

if (intGruppe>AdvOutlookList1.GroupCount)or
(intZeile>AdvOutlookList1.Groups[intGruppe-1].ChildCount) or
(intSpalte>AdvOutlookList1.Columns.Count) then
exit(‚-1‘);

prüft, ob die übergebenden Werte nicht Eintragsgrenzen überschreiben – werden Werte übergeben, die in einen ungültigenBereich liegen, so gibt die Funktion -1 (als String) zurück.

Die Variablen intGruppe, intSpalte, IntZeile folgen mehr menschlicher Logik, d.h. die Zählung beginnt immer mit
1. Die Funktion rechnet es dann intern in die Delphi-Logik um, wo ja immer mit Null die Zählung beginnt.

Beachten Sie, dass der Aufruf
exit(‚-1′)

erst ab Delphi 2009 funktioniert, in älteren Versionen müssen Sie dies durch

begin result:=‘-1′; exit; end; ersetzen

Einen bestimmten Texteintrag suchen

Folgende Funktion ermittelt das dazugehörige PoglItem, welches den gewünschten Wert enthält.

function TForm1.findentry(suchtext:String):POGLItem;
var g,z,c:Integer; spalten:TStrings;
begin
if self.AdvOutlookList1.GroupCount>0 then
begin
for g := 0 to self.AdvOutlookList1.GroupCount-1 do
begin
if self.AdvOutlookList1.Groups[g].ChildCount>0 then
begin
for z := 0 to self.AdvOutlookList1.Groups[g].ChildCount-1 do
begin
spalten:=self.AdvOutlookList1.Groups[g].ChildItem[z];
for c := 0 to spalten.Count-1 do
if UpperCase(suchtext)=UpperCase(spalten[c]) then
exit(self.AdvOutlookList1.Groups[g].ChildOGLItem[z]);
end;
end;
end;
end;
exit(nil);
end;

Die Funktion gibt Nil zurück, wenn der Suchtext nicht gefunden wird, ansonsten das PoglItem, welches den Wert enthält. Gefunden wird immer der erste Eintrag, auch wenn ein Wert mehrmals vorkommt.Sollen mehrere Einträge ermittelt werden, muss die Funktion von Ihnen entsprechend ausgebaut werden.

Eine PoglItem ist eine Art Zeiger auf die entsprechenden Listeneinträge.

Das Ergebnis könnten Sie dann z.B. wie folgt auswerten:

var gItem:PoglItem; Inhalt:TStrings;
begin
gItem:=findentry(‚Projektmodul‘);
IF gItem<>Nil then
begin
Inhalt:=advOutlooklist1.GetItemData(gItem);
Showmessage(Inhalt[1]);
end  else
ShowMessage(‚Nicht gefunden‘);

Sinnvoll wäre z.B. wenn alle Einträge Ihrer Outlookliste eine Spalte mit eindeutigen Indexwerten enthalten würde.
Arbeiten Sie z.B. mit Datenbanken könnten Sie so schnell die Position eines Eintrages in der Liste ermitteln und z.B. den Werte von Spalte X ermitteln oder diesen durch entsprechende Programmierung aktualisieren (z.B., wenn sich der Wert in der Datenbank verändert hat, Sie aber nicht die ganze Liste neu einlesen möchten, sondern lieber gezielt nur eine veränderte Zeile oder gar Spalte aktualisieren möchten).

Obige Routinen geben Ihnen zumindest das Handwerkszeug, um Ihre Anforderungen zu programmieren.

Viel Spaß beim Programmieren und Testen !

Werbung

Aktuelle Top Aktionen bei Acer, HP, Lenovo, Bitdefender & Co

Angebote bei Acer
Acer Gaming Week: Bis zu 15% Rabatt auf Acer Gaming Notebooks, PCs und Zubehör bis 21. August 2018


Angebote bei HP
» HP 10% Gutschein für All-in-One PCs:10% Rabatt mit HP Gutschein HPTD1XA818 die HP All-in-One PCs im HP Store in dieser Liste


Angebote bei Lenovo
» Lenovo Top Wochenangebote: Heiße ThinkPad und IdeaPad Wochenangebote mit großer Auswahl und dicken Rabatten


Weitere Möglichkeiten
» Top bei Otto: Sehr gute HP Notebook Angebote, teils mit Extras wie 4 Jahre Garantie und mehr
» Mehr Aktionen in der Übersicht: Aktuelle HP Angebote und mehr auf einem Blick


Aktuelle Bitdefender Aktionen:
» Top Angebot: Bitdefender "The Darkest Minds Promotion" mit kostenlosem Gewinnspiel und Angebot Total Security 2019 MultiDevice nur 39,99€ statt 79,99 Euro (50% Rabatt)
» Bitdefender Sommer-Aktion Version 2019 mit 25% auf Bitdefender Antivirus Plus 2019 (3 Geräte und 1 Jahr), 42% auf Bitdefender Internet Security 2019 (3 Geräte und 1 Jahr) und 50% auf Bitdefender Total Security Multi Device 2019 (5 Geräte und 1 Jahr)
» Bitdefender +1 Jahr dazu-Aktion
» Top für neue PCs! Bitdefender AntiVirus Plus Lebenslang Edition: 5 Jahre Schutz für nur für nur 89,95
Weitere aktuelle Bitdefender Angebote » Alle Bitdefender Angebote auf einem Blick

Werbung

Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.