Einzelnen Beitrag anzeigen

Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#18

Re: ein OnHover nachbauen / benutzen

  Alt 25. Sep 2009, 07:56
Da so viele Komponenten aufeinander liegen muss ich immer schauen das ich das Panel erreiche, denn nur dieses soll Hovern.
Ich müsste pro Liste das OnEnter/OnLeave des Images und Labels. Von da muss ich auf das Panel um die Farbe zu ändern.
Dazu brauche ich auch immer das letzte aktiv gewesene Panel um dort die Farbe wieder zu ändern sobald ich nicht mehr auf diesem bin.

Da ich nicht über das OnEnter/OnLeave des Panels gehen kann um das Hint Zeitversetzt aufzurufen, Aufgrund dessen das diese beidem Prozeduren durch das Image und Label nicht aufgerufen werden.

Bei dem Deteils des Benutzers siehts es zudem etwas anders aus. Dieses besteht nur aus einem Panel und darauf enthalten sind zwei Labels und einige Images, die nicht das ganze Panel belegen.

Ich müsste dann also zwei globale Prozeduren haben, auf die jedes Panel, Image und Label zugreifen.

Delphi-Quellcode:
procedure OnMouseEnter(Sender: TObject);
procedure OnMouseLeave(Sender: TObject);
Sobald das OnEnter aufgerufen wird, muss ich dann auf das Panel kommen indem ich das jeweilige Parent des Images und Labels prüfen.
Den Zustand des Panels speichern und prüfen ob es sich geändert hat.

Delphi-Quellcode:
procedure OnMouseEnter(Sender: TObject);
  var
    TmpPanel: TPanel;
begin
  if Sender is TImage then begin
    if TImage(Sender).Parent is TPanel then
      TmpPanel := (TImage(Sender).Parent) as TPanel;
  end
    else if Sender is TLabel then begin
      if TLabel(Sender).Parent is TPanel then
        TmpPanel := (TLabel(Sender).Parent) as TPanel;
    end
      else if Sender is TPanel then begin
        TmpPanel := (Sender) as TPanel;
      end
        else Exit;

  TmpPanel.Color := clAqua;
end;

procedure OnMouseLeave(Sender: TObject);
  var
    TmpPanel: TPanel;
begin
  if Sender is TImage then begin
    if TImage(Sender).Parent is TPanel then
      TmpPanel := (TImage(Sender).Parent) as TPanel;
  end
    else if Sender is TLabel then begin
      if TLabel(Sender).Parent is TPanel then
        TmpPanel := (TLabel(Sender).Parent) as TPanel;
    end
      else if Sender is TPanel then begin
        TmpPanel := (Sender) as TPanel;
      end
        else Exit;

  TmpPanel.ParentColor := True;
end;
Das ist nun ungetestet, wie würde ich da aber das Hint anzeigen?
Ist das wirklich Performanter?

Edit: Proceduren geändert!
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat