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 Halloween Angebot: Gratis Zubehör im Wert von bis zu 449 Euro beim Kauf eines ausgewählten Notebooks – von Swift bis Predator Helios Modellen
» Acer Spezialangebote:Rabatt und Extras auf viele Acer Notebooks, Convertibles, Gaming Notebooks und PC, Monitore und mehr


Angebote bei HP
» 10% Rabatt auf HP Pavilion Notebooks:
10% Rabatt auf HP Pavilion Notebooks/Convertibles im HP Store. Teilnehmende Notebooks und Gutschein hier im HP Store.

» HP Herbst Angebote: Attraktive Herbstangebote mit aktuellen HP Notebooks und Convertibles und vieles mehr bis 31.10.2018

Angebote bei Lenovo

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


Weitere interessante Angebote

» 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:

» Bitdefender „Schulstart“ Angebot mit bis zu 44% Rabatt
» 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.