Das SysLink-Control ist ein neues Common Control, das allerdings erst ab Windows XP zur Verfügung steht. Es erfordert außerdem eine Manifestdatei (beiliegend oder in den Ressourcen der Anwendung), damit die Common Controls 6.0 geladen werden können. Andernfalls sehen Sie das Control nicht.
Ihre Delphi-Version sollte natürlich auch aktuell genug sein. Ist dies nicht der Fall, dann nutzen Sie bitte die beiliegende Unit "CommCtrl_Fragment.pas", die alle notwendigen Deklarationen enthält.
Das Control bietet eine recht einfache Möglichkeit, Webseiten, Mailadressen usw. im Programm unterzubringen, wobei die typische Linkform genutzt wird. Technisch können Sie es am besten mit einem Label vergleichen, da auch zusätzlicher Text möglich ist:
![]()
Bevor Sie das Control erzeugen, müssen Sie die neue Klasse ICC_LINK_CLASS mit dem Befehl "InitCommonControlsEx" initialisieren:
var
icc: TInitCommonControlsEx = (
dwSize:sizeof(TInitCommonControlsEx);
dwICC:ICC_LINK_CLASS;);
begin
InitCommonControlsEx(icc);
{ ... }
end;
Das PSDK sagt sogar, dass der Befehl "CoInitialize" aufzurufen ist. Es funktioniert interessanterweise aber auch ohne. Das Erzeugen des Controls geht dann wie üblich mit "CreateWindowEx" vonstatten. Als Klassenname ist "SysLink" (bzw. die Konstante WC_LINK) anzugeben:
const
LINK_TEXT2 : widestring =
'Hier geht´s zu <a href=" http://www.microsoft.com">Microsoft</a>.' +
#13#10 + 'Oder?';
hLink2 := CreateWindowExW(0,WC_LINK,pwidechar(LINK_TEXT2),WS_VISIBLE or WS_CHILD,
10,60,160,45,wnd,IDC_LCONTROL2,hInstance,nil);
An diesem Beispiel sehen Sie, dass die gewünschte URL wie in einer HTML-Seite angegeben wird. Das Control interpretiert in diesem Fall das Tag href und stellt den Text dazwischen als Link dar. Zu beachten ist aber, dass ich die Konstante als widestring deklariert habe und daher auch "CreateWindowExW" benutzen musste.
Neben href wird momentan vom Control nur noch id unterstützt, das Sie beispielsweise für interne Zwecke innerhalb der Anwendung verwenden können.
Beachten Sie in der o.g. Konstante LINK_TEXT2 bitte das Leerzeichen vor der URL. Geben Sie es nicht an, wird beim Auslesen der URL komischerweise das H entfernt, so dass aus der Webadresse "ttp://www.microsoft.com" wird. Der Grund für dieses merkwürdige Verhalten ist mir leider unbekannt. Darauf hinweisen möchte ich Sie, auch wenn es sich dabei um einen Denkfehler von mir handeln sollte. (Oder vielleicht gerade deshalb.)
Bei der Benutzung des id-Tags passiert das übrigens nicht. Hier ist das Leerzeichen nicht erforderlich, und die ID wird dennoch komplett erkannt.
'<a id="Hallo">Hallo</a>'
Jedes SysLink-Control unterstützt mehr als einen Link. Im obigen Quellcodeausschnitt haben wir lediglich eine Webseite angegeben. Das Beispielprogramm erzeugt aber vorher bereits ein anderes SysLink-Control, das zwei verschiedene id-Links enthält.
LINK_TEXT1 = 'Oft zitiert: <a id="Hallo">Hallo</a>, ' + #13#10 + '<a id="Welt">Welt</a>.';
Jeder Link besitzt seinen eigenen internen Indexwert, der in jedem Control bei Null beginnt. Aus diesem Grund besitzen die anfangs gezeigte URL (www.microsoft.com) und der hier zu sehende id-Link "Hallo" beide den Index Null.