Wenn Sie das Control benutzen, wird die Nachricht "WM_NOTIFY" an Ihre Anwendung gesendet. Die code-Membervariable gibt dabei an, ob es sich um einen Klick oder um das Ergebnis der Enter-Taste handelt:
WM_NOTIFY:
case PNMHdr(lp)^.code of
NM_RETURN,
NM_CLICK:
{ ... }
end;
Sie haben nun die Möglichkeit, mit den internen Indexwerten oder mit den IDs und URLs zu arbeiten. Empfehlenswert ist natürlich die Auswertung der Indexes, da sich diese nicht ändern. Im Beispielprogramm wird Ihnen beim Klick auf die Links lediglich die ID bzw. URL angezeigt, daher wollen wir hier ein detailliertes (aber fiktives) Beispiel machen.
Nehmen wir also an, wenn der Anwender auf die beiden Links "Hallo" und "Welt" klickt, sollen interne Programmfunktionen ausgelöst werden, die in dem Fall durch Dialogboxen simuliert werden:
if(hwndFrom = hLink1) then
case PNMLink(lp)^.item.iLink of
0: MessageBox(wnd,'Aktion 1','Hallo',0);
1: MessageBox(wnd,'Aktion 2','Welt!',0);
end;
Etwas interessanter wird es allerdings, wenn Sie die IDs direkt vergleichen. Da Sie mit Hilfe des Beispielprogramms die ID des Links "Hallo" ändern können, reagiert dieser also je nach Situation unterschiedlich:
if(lstrcmpW(PNMLink(lp)^.item.szId,'Hallo') = 0) then MessageBox(wnd,'Aktion 1','Hallo',0) else if(lstrcmpW(PNMLink(lp)^.item.szId,'Welt') = 0) then MessageBox(wnd,'Aktion 2','Welt!',0) else if(lstrcmpW(PNMLink(lp)^.item.szId,'Morgenstund') = 0) then MessageBox(wnd,'Aktion 3','Hallo',0) else MessageBox(wnd,'Link ins Nichts?',nil,MB_ICONWARNING);
Die URL aus dem zweiten SysLink-Control leiten Sie dagegen ohne viel Aufhebens an den Standardbrowser Ihres Systems weiter. Da es sich bei der szUrl-Variablen um einen Unicode-String handelt, müssen Sie aber die entsprechende Funktion "ShellExecuteW" verwenden:
if(hwndFrom = hLink2) then ShellExecuteW(wnd,nil,PNMLink(lp)^.item.szUrl,nil,nil,SW_SHOWNORMAL);