![]() |
Eigene "Listbox" - Scrollproblem
Hallo!
ich hab die letzten Tage damit verbracht mir eine art "Gästeliste" zusammenzubasteln. einen eigenen Scrollbalken (für die Vertikale) hab ich schon länger. Hab allerdings noch nie versucht eine eigene scrollbare Komponente zu bauen. das Scroll ereigniss habe ich folgendermaßen gedacht (und probiert):
Delphi-Quellcode:
mit ActiveElement leg ich fest welches element "gehighlighted" wird. (in der Paint procedure)
if Position = ActiveElement then
Exit; i := 50 * FClients.Count; if i > Self.Height then begin FTop := 0 - (Position * 47); end; if Position = Clients.Count then Exit; ActiveElement := Position; mit FTop verringer ich den Top-Wert jedes Elements. 47 ist die höhe eines Elements. Leider scrollt der Balken viel zu weit nach unten und ich weiß nicht wie und wo ich das beschränken kann (soll). Meine nächstes Problem ist die OnMouseDown procedure:
Delphi-Quellcode:
ich hab (wie ihr seht) schon selber n bissl rumgespielt. Leider erreich ich nicht ganz was ich möchte: Beim klick sollte das darunterliegende element als ActiveElement gesetzt werden und es sollte zu diesem Element gescrollt werden (via SetActive):
procedure TZClientList.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); var i, j: integer; begin inherited; FMouseDown := TRUE; case ViewMode of zvReport: begin j := (FClients.Count * 47) + 25; if (x > 5) and (x < Width - 5) then if (y > 22) and (y < Height) then begin i := (FTop + y - 22) div 47; if i < FClients.Count then ActiveElement := i else Exit; end; end; end; end;
Delphi-Quellcode:
(Draw ist ähnlich der Paint procedure (ich verwende allerdings ein Nachfahreobjekt von TWinControl)
procedure TZClientList.SetActive(const Value: Integer);
begin FActive := Value; if Assigned(FSlider) then if FClients.Count > 0 then if Value > -1 then Slider.Position := Value; Draw; end; ich habe beim OnMouseDown einen Boolschen wert gesetzt: FMouseDown. Damit erreiche ich schon dass man mit gedrückter Maustaste elemente markieren kann (und scrollen). also nochmal kurz: 1. NEbeneffekt ist: Es wird viel zu weit nach unten gescrollt. Wie kann ich das beschränken? 2. Mit MouseDown möchte ich element markieren. Leider klappt das nicht mehr seit ich diese SCrollerei eingebaut habe. Danke, Daniel |
Re: Eigene "Listbox" - Scrollproblem
*push*
kann mir niemand helfen? oder hab ich mich doof ausgedrückt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz