// Feststellen, welcher Buchstabe in einem Label angeklickt wurde:


// Getestet mit RS 10.4 unter
Win11
 
function BST(LB: TLabel; X: Integer; out ST: Integer): String; 
var 
  I, Y: Integer; 
begin 
  Y := 0; 
  ST := 0; 
  Result := ''; 
  with LB do 
    for I := 1 to length(Caption) do 
      with Canvas do 
      begin 
        inc(Y, TextWidth(Caption[I])); 
        if X < Y then 
        begin 
          Result := Caption[I]; 
          ST := I; 
          Break; 
        end; 
      end; 
end; 
 
// Beispiel 
// S = angeklickter Buchstabe 
// Y = der wievielte Buchstabe ist es 
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
var 
  S: String; 
begin 
  S := BST(TLabel(Sender), X, Y); 
  Label2.Caption := S + #13 + InttoStr(Y); 
end; 
 

// ------------------------------------------------------- 
// Erweiterung:
// Beim Klick auf ein Label wird der Teilpfad (bzw. der Pfad) am Klickpunkt ermittelt.
// Steht beispielsweise im Label C:\Program Files\Windows Media Player\de-DE
// und man klickt auf einen Buchstaben von Files, dann erhält man C:\Program Files\
// zurück. Mittels der Variablen "pruef" kann man einstellen, dass auf das
// Vorhandensein des Ordners oder der Datei geprüft wird. Im Zweifelsfall wird ein
// leerer String zurückgegeben.
 
function PFD(LBL: TLabel; X: Integer; pruef: Boolean = False): String; 
var 
  I, Y, ST: Integer; 
  S: String; 
 
  function Exists(Nm: string): Boolean; 
  begin 
    Result := Integer(GetFileAttributes(PChar(Nm))) <> -1; 
  end; 
 
begin 
  Y := 0; 
  Result := ''; 
  with LBL do 
  begin 
    ST := Length(Caption);
    for I := 1 to ST do 
      with Canvas do 
      begin 
        inc(Y, TextWidth(Caption[I])); 
        if X < Y then 
        begin 
          ST := I; 
          Break; 
        end; 
      end; 
    S := Caption; 
    for I := ST to length(S) do 
      if S[I] = '\' then 
      begin 
        S := copy(S, 1, I); 
        Break; 
      end; 
    if pruef and not Exists(S) then 
      exit; 
    Result := S; 
  end; 
end; 
 
// Beispiel: Anzeige eines (Teil)Pfades 
// Es wird geprüft, ob das Objekt vorhanden ist 
procedure TForm1.Label3MouseDown(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
begin 
  ShowMessage(PFD(TLabel(Sender), X, True)); 
end;

 

Zugriffe seit 6.9.2001 auf Delphi-Ecke