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 !

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

Notebook & PC Angebote:
» Extra Aktion: 10% Gutschein auf HP 17" Notebooks: HP Notebook, HP Pavilion, HP Envy und Omen Modelle zur Auswahl bis 30. Mai (Gutschein: HPTD1XN518)
» HP Extra Aktion: 100 Euro Extra sparen bei HP Notebooks ab 999 Euro. Gutscheincode und alle Infos hier im HP Store
» Top bei Otto: Sehr gute HP Notebook Angebote mit Extras wie 4 Jahre Garantie und mehr
» Notebooksbilliger.de WM Special:Jede Woche 11 neue Top Angebote>
» Mehr Aktionen in der Übersicht: Aktuelle HP Angebote und mehr auf einem Blick

Aktuelle Bitdefender Aktionen:
» Neue Aktion: Bitdefender 39 Euro Flat mit 5 Geräten
» Bitdefender +1 Jahr dazu-Aktion
» Die neue Bitdefender 40% und mehr Rabatt Aktion
» Top für neue PCs! Bitdefender Internet Security 2018 PC Lebenslang Edition: 5 Jahre Schutz für nur für nur 89,95

Weitere aktuelle Bitdefender Angebote » Alle Bitdefender Angebote auf einem Blick

Avira Antivirus - Ihr Virenschutz 2018

Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.