Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigene "Listbox" - Scrollproblem (https://www.delphipraxis.net/56511-eigene-listbox-scrollproblem.html)

Zerolith 7. Nov 2005 08:21


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:
  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 ActiveElement leg ich fest welches element "gehighlighted" wird. (in der Paint procedure)
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:
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;
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):
Delphi-Quellcode:
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;
(Draw ist ähnlich der Paint procedure (ich verwende allerdings ein Nachfahreobjekt von TWinControl)
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

Zerolith 8. Nov 2005 08:34

Re: Eigene "Listbox" - Scrollproblem
 
*push*

kann mir niemand helfen? oder hab ich mich doof ausgedrückt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz