Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

AW: OnMouseOver bei Array of TPanel

  Alt 2. Okt 2010, 18:50
[...]Wenn es euch nicht zu viel ist: Was soll mann bei "p.VisibilityEvent:=" einschreiben, wenn eine Variable um eins veringert werden soll.[...]
Da gibt man eine Methode an und keine Formel:
Delphi-Quellcode:
type
  TForm1 = class(TForm) // oder wie auch immer das heißt
  private
    FInVisCount: Integer; // Speichert wie viele Panels unsichtbar wurden
    procedure OnVisibility(Panel : TColoredLabel);
  //...
  end;
So irgendwo erstellst du ja deine ganzen Panels, dort trägst du jetzt für jedes Panel ein, dass die Methode "OnVisibility" da eingetragen wird:
Delphi-Quellcode:
p := TColoredPanel.Create(Self);
p.Left := ....;
[...]
p.VisibilityEvent := OnVisibility;
Und in der Methode erhöhst du Anzahl unsichtbaren Panels um eins.

Delphi-Quellcode:
procedure TForm1.OnVisibility(Panel : TColoredLabel);
begin
  Inc(FInVisCount);
end;
Damit musst du nicht ständig durch die Liste iterieren.

Das ist so ähnlich wie bei den "OnClick" von einem Button oder so: Der Button bekommt mit das er angeklickt wurde. Dann guckt er nach, ob es eine Methode gibt, die aufgerufen werden soll, wenn es angeklickt wurde und führt sie dann aus, wenn es der Fall ist.

Dabei ist "OnVisibility" die Methode die letztlich ausgeführt werden soll (die er nachguckt, ob sie gesetzt wurde). Das setzen, das diese Methode aufgerufen werden soll, das machst du beim erstellen der Liste (p.VisibilityEvent := ...) und das ganze wird in Gang gesetzt, wenn es von der Maus berührt wurde.

MfG
Fabian

PS: Kennt D3 noch keine TObjectList?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler

Geändert von xZise ( 2. Okt 2010 um 18:53 Uhr)
  Mit Zitat antworten Zitat