[...]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?