Klick und Hopp!


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);