Zitat von
Nogge:
Ich möchte aufs Scrollen allgemein in der Listbox reagieren können, d.h. mit der Maus und mit den Tasten. Deshalb dachte ich auch daran, auf die Änderung des TopIndex' zu reagieren, denn dann wird ja immer gescrollt.
Ok, jetzt versteh ich... Dann musst du die Windows-Message für das Scrollen abfangen und ein Event dafür schreiben (so wie OnClick usw.)
Zitat von
Nogge:
Ich verstehe deine Property aber immer noch nicht (sry^^). Also wenn ich jetzt in die SetTopIndex-Procedure meinen Code hineinschreibe, wird dieser immer ausgeführt, wenn sich der TopIndex ändert (habs noch nicht ausprobiert^^)?
Der Code würde eben nur dann ausgeführt werden, wenn du über die Eigenschaft TopIndex direkt setzt (ListBox.TopIndex := x) und nicht, wenn du per Tastatur oder Maus scrollst...
Also schreiben wir ein OnScroll-Event für die ListBox:
Delphi-Quellcode:
unit ListBoxEx;
interface
uses
Messages, Classes, StdCtrls;
type
TListBoxEx =
class(TListBox)
private
FOnScroll: TScrollEvent;
procedure WMScroll(
var Message: TWMScroll);
message WM_VSCROLL;
published
property OnScroll: TScrollEvent
read FOnSCroll
write FOnScroll;
end;
procedure Register;
implementation
procedure TListBoxEx.WMScroll(
var Message: TWMScroll);
var
ScrollPos: Integer;
begin
inherited;
ScrollPos :=
Message.Pos;
if Assigned(FOnScroll)
then
if TScrollCode(
Message.ScrollCode)
in [scLineUp, scLineDown,
scPageUp, scPageDown, scPosition, scTop, scBottom]
then
FOnScroll(Self, TScrollCode(
Message.ScrollCode), ScrollPos);
end;
procedure Register;
begin
RegisterComponents('
Beispiele', [TListBoxEx]);
end;
end.
Im Menü unter Komponente/Komponente installieren wählst du diese
Unit aus und installierst sie.
Dann hast du in der Komponentenleiste auf dem Reiter Beispiele eine neue Komponente (ListBoxEx).
MfG
Stevie
P.S. Hier im Forum findest du genug zum Thema Komponenten-Entwicklung, wenn du dich damit näher befassen willst.