Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Firemonkey - Tooltip-Componente

  Alt 24. Nov 2013, 23:11
ich würde die beiden prozeduren AddControlName() und AddControlTip() zu einer einzigen Prozedur mit 2 Parametern zusammenfassen.
Dein Anwendungbeispiel sieht dann so aus:
Delphi-Quellcode:
  //Hinzufuegen der Controls & Texte, welche angezeigt werden sollen
  Tooltip.AddControlTip(Image_Beispiel, 'Dies ist der Tip zum Bild Image_Beispiel');
  Tooltip.AddControlTip(Edit_Beispiel, 'Dies ist der Tip zur TextBox Edit_Beispiel');
  Tooltip.AddControlTip(Listbox_Beispiel, 'Dies ist der Tip zur ListBox Listbox_Beispiel');

  // der Tooltip für ein Control kann auch nachträglich geändert werden
  Tooltip.AddControlTip(Edit_Beispiel, 'Geänderter Tip zur TextBox Edit_Beispiel');

  // man kann sogar den Tooltip wieder entfernen
  Tooltip.AddControlTip(Listbox_Beispiel, '');
Damit wird die Schnittstelle klarer und es wird verhindert, dass Controls und Tips auseinanderlaufen.
Delphi-Quellcode:
// die neue Prozedur
procedure TTooltip.AddControlTip(control: Tcontrol; const ToolTip: String);
var
  i : integer;
begin
  i := Tips.IndexOfObject(control); // prüfe ob Control schon in Liste
  if i <> -1 then
  begin
    if ToolTip = 'then
      Tips.Delete(i) // lösche bestehenden Eintrag in der Liste
    else
      Tips.Strings[i] := ToolTip // ändere Tooltip für gefundenes Control
  end
  else if Assigned(control) then
    Tips.AddObject(ToolTip, control); // Control & Tooltip anhängen
end;
Das Feld Elements: TStringList kann dann komplett entfallen.
In der Procedure procedure TTooltip.ShowDelayOnTimer müssen dann natürlich Veränderungen vorgenommen werden.
Delphi-Quellcode:
  LObject := (Parent as TForm).ObjectAtPoint(FMousePoint) ;

  idx := Tips.IndexOfObject(LObject);
  if idx <> -1 then // prüfe ob das Control in der Liste ist
  begin
    Text := Tips.Strings[idx]; // Hole den Tooltip zu dem Control
    LMousePos := Screen.MousePos;
    ShowToolTip(LMousePos.X, LMousePos.Y);
  end;
Die Hilfsprozeduren GetElementIndex() und GetElementTip() werden nicht mehr gebraucht.
fork me on Github

Geändert von sx2008 (24. Nov 2013 um 23:18 Uhr)
  Mit Zitat antworten Zitat