Thema: Delphi Label unter Mausposition

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#30

Re: Label unter Mausposition

  Alt 13. Sep 2005, 20:35
Zitat:
ich müsste dann ja bei allen 30 labeln mouseenter mouseleave jeweils 1 procedure machen...
Ok, Faux hat es dir schon gesagt, nun nochmal.

1.) du hast 30 labels auf deinem TForm.
2.) klicke in das OnMouseEnter im OI von Label1 und schreibe im Quelltext folgendes

Delphi-Quellcode:
procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
  (Sender as TLabel).Font.Color := clRed;
end;
3.) nun wieder in de OI vom Label1 in OnMouseLeave() und doppelklick in der Methode schreibst du folgendes

Delphi-Quellcode:
procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
  (Sender as TLabel).Font.Color := clBlack;
end;
4.) jetzt arbeitet das Label1 auf deinem Form schon wie gewünscht.
5.) markiere alle anderen Labels von Label2 bis Label30 per Shift Taste
6.) gehe in den OI in OoMouseEnter() und wähle dort in der DropDown Liste die Methode .Label1OnMouseEnter() aus
7.) mache das gleiche mit OnMouseLeave()

Nun haben alle 30 Labels die gleichen beiden Methoden, wie oben codiert in ihren Events zugewiesen.

Du benötigst also KEINE 30*2 eigene Events um diese dann auf 2 Basismethoden umzudiregieren.

Das Problem mit meiner Funktion ist das du nicht erkennen kannst ob die Mausbewegung ein neues Label selektiert bzw. das alte selektierte Label verlassen hat. Benötigst du diese Funktionalität so müsstest du meine Methode umbauen, inetwaso

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  ...blabla
  private
    FCurrentLabel: TControl;
  ...blabla
  end.

procedure TForm1.MouseMove();
var
  C: TControl;
begin
  C := FindDragTarget(ClientToScreen(Point(X, Y)), False);
  if C <> FCurrentLabel then
  begin
    if (FCurrentLabel is TLabel) and (FCurrentLabel.Owner = Self) then
      TLabel(FCurrentLabel).Font.Color := clBlack;
    FCurrentLabel := C;
    if (FCurrentLabel is TLabel) and (FCurrentLabel.Owner = Self) then
      TLabel(FCurrentLabel).Font.Color := clRed;
  end;
end;
Wichtig ist nur eines, egal welche Lösung du benutzt, du musst sie verstanden haben.
Ich empfehle also erstmal den Vorschlag von Faux genau zu verstehen, denn sein Vorschlag ist die Standardvorgehensweise, die man begriffen haben sollte. Also arbeite obige Punkte einfach mal ab.

Gruß Hagen
  Mit Zitat antworten Zitat