ich: [Delphi:] Webbrowser => Link und Linktext ermitteln

tach,
wie kann man z.b. bei einem klick auf einen im webbrowser angezeigten link dessen text und link auslesen?

also wenn da steht: freemail ,
dann soll da bei nem klick drauf folgendes angezeigt werden:
text: "freemail"
link: "http://freemail.de"

wie geht das am einfachsten?

  1. Hi

    wie geht das am einfachsten?

    Fuer dein "triviales" Problem gibt es eigentlich andere Anlaufstellen (wie waer's zum Beispiel mit newsgroups.borland.com ?). Ich poste trotzdem mal einen Loesungsansatz. Erwarte allerdings keine grossartigen Erklaerungen von mir.

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Label1: TLabel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure FindIEEditHandle;
      end;

    var
      Form1: TForm1;
      EditHandle: THandle;

    implementation

    {$R *.DFM}

    function EnumIEChildProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall;
    var
      tmpS: string;
      theClassName: string;
      theWinText: string;
    begin
      Result := True;
      SetLength(theClassName, 256);
      GetClassName(AHandle, PChar(theClassName), 255);
      SetLength(theWinText, 256);
      GetWindowText(AHandle, PChar(theWinText), 255);
      tmpS := StrPas(PChar(theClassName));
      if theWinText <> EmptyStr then
        tmpS := tmpS + '"' + StrPas(PChar(theWinText)) + '"'
      else
        tmpS := tmpS + '""';
      if Pos('Edit', tmpS) > 0 then
      begin
        EditHandle := AHandle;
      end;
    end;

    function IEWindowEnumProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall;
    {callback for EnumWindows.}
    var
      theClassName: string;
      theWinText: string;
      tmpS: string;
    begin
      Result := True;
      SetLength(theClassName, 256);
      GetClassName(AHandle, PChar(theClassName), 255);
      SetLength(theWinText, 256);
      GetWindowText(AHandle, PChar(theWinText), 255);
      tmpS := StrPas(PChar(theClassName));
      if theWinText <> EmptyStr then
        tmpS := tmpS + '"' + StrPas(PChar(theWinText)) + '"'
      else
        tmpS := tmpS + '""';
      if Pos('IEFrame', tmpS) > 0 then
      begin
        EnumChildWindows(AHandle, @EnumIEChildProc, longInt(0));
      end;
    end;

    procedure TForm1.FindIEEditHandle;
    begin
      Screen.Cursor := crHourGlass;
      try
        EnumWindows(@IEWindowEnumProc, LongInt(0));
      finally
        Screen.Cursor := crDefault;
      end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      FindIEEditHandle;
      if EditHandle > 0 then
        Label1.Caption := IntToStr(EditHandle)
      else
        label1.Caption := 'Not Found';
    end;

    end.

    Gruss
    Uwe