AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[TListBox] Aktuelle Scrollzeile

Ein Thema von Nils_13 · begonnen am 12. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

[TListBox] Aktuelle Scrollzeile

  Alt 12. Feb 2007, 09:33
Hi,

wenn man in einer Listbox das Mouserad abfängt, dann möchte ich, dass eine TrackBar die Position erhält, an welcher gerade die ListBox steht. Ich meine NICHT den ItemIndex. Es ist schwer zu erklären, deshalb ist im Anhang ein kleines Beispiel, welches dieses Problem demonstrieren soll: Benutzt einfach den Slider und bewegt ihn ein paar Mal hoch und runter. Ich möchte genau dies mit dem MouseRad ermöglichen. Es ist wirklich nicht über ItemIndex zu lösen, da man beim scrollen nicht den ItemIndex beinflusst und die künstliche ScrollBar somit zum stehen kommt.
Zum Scrollen (reagiert auf Vertikal und Horizontal, nur Vertikal ist nötig) hier den zur Verfügung stehenden Code:
Delphi-Quellcode:
procedure TfrmMain.lbListScroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  //
end;
Angehängte Dateien
Dateityp: exe project1_490.exe (388,5 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: [TListBox] Aktuelle Scrollzeile

  Alt 12. Feb 2007, 10:17
Ich weis zwar nicht, ab du sowas meinst, aber kannst ja mal versuchen.
Delphi-Quellcode:
var
  Rect: TRect;
begin
  if listbox1.Count> 0 then
  begin
    Rect:= listbox1.ItemRect(0) ;
    caption:= inttostr(Rect.Top div listbox1.ItemHeight* -1);//Beispiel
    Trackbar1.Position:= (Rect.Top div listbox1.ItemHeight* -1)
  end;
end;
Der Code funktioniert nur beim runterscrollen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 16:55
Thx, das funktioniert perfekt. Wie sieht das dann beim Hochscrollen aus ? Steh gerade echt auf dem Schlauch.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 20:07
Ich hoffe mal, dass dieser Code beim Hochscrollen funktioniert.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
  var
  Rect: TRect;
  WinInfo: TWindowInfo;
  iHeight: integer;
begin
  Caption:= '0';
  if listbox1.Count> 0 then
  begin
    ZeroMemory(@WinInfo, sizeOf(WinInfo));
    WinInfo.cbSize:= SizeOf(WinInfo);
    GetWindowInfo(listbox1.Handle, WinInfo);
    //iHeight= sichtbare Bereich in der Listbox
    iHeight:= WinInfo.rcClient.Bottom- WinInfo.rcClient.Top;
    Rect:= Listbox1.ItemRect(Listbox1.Count) ;
    if Rect.Bottom> iHeight then
    begin
      caption:= inttostr((Rect.Bottom- iHeight)div listbox1.ItemHeight);//* -1);
      //Trackbar1.Position:= ((Rect.Bottom- iHeight) div listbox1.ItemHeight);
    end;
  end;
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 20:12
Leider nicht.
Delphi-Quellcode:
procedure TfrmMain.lbListScroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
var Rect : TRect;
    WinInfo : TWindowInfo;
    iHeight : integer;
begin
  if ScrollCode = scLineDown then
  begin
    Rect := lbList.ItemRect(0);
    xiScrollV.Position := (Rect.Top div lbList.ItemHeight * -1);
  end else
  if ScrollCode = scLineUp then
  begin
    ZeroMemory(@WinInfo, sizeOf(WinInfo));
    WinInfo.cbSize:= SizeOf(WinInfo);
    GetWindowInfo(lbList.Handle, WinInfo);
    //iHeight= sichtbare Bereich in der Listbox
    iHeight:= WinInfo.rcClient.Bottom- WinInfo.rcClient.Top;

    Rect := lbList.ItemRect(lbList.Count);
    if Rect.Bottom > iHeight then
      xiScrollV.Position := ((Rect.Bottom- iHeight) div lbList.ItemHeight);
  end;
end;
Er scrollt hoch und danach wieder runter.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 20:22
Welchen Wert hat bei dir Trackbar1.Max ?
Die Procedure erechnet praktisch, wieviel Items nicht mehr sichtbar sind, also unterhalb der Listbox sind.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 20:25
Ah, daran könnte es liegen. Er hat lbList.Count (Playlistcount bzw. Listboxcount). Wie muss man denn hierfür den Max-Wert der Trackbar setzen ?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 20:50
Versuche erst einmal Trackbar1.Position:= lbList.Count- //Items unterhalb der Listbox(also die nicht mehr sichtbar sind) Ansonsten so:
Delphi-Quellcode:
var
  Rect: TRect;
  WinInfo: TWindowInfo;
  iHeight: integer;
begin
  if listbox1.Count> 0 then
  begin
    ZeroMemory(@WinInfo, sizeOf(WinInfo));
    WinInfo.cbSize:= SizeOf(WinInfo);
    GetWindowInfo(listbox1.Handle, WinInfo);
    iHeight:= WinInfo.rcClient.Bottom- WinInfo.rcClient.Top;
    Trackbar1.Max:= ((Listbox1.Count* Listbox1.ItemHeight)- iHeight) div Listbox1.ItemHeight+ 1;
    Rect:= listbox1.ItemRect(0) ;
    caption:= inttostr(Rect.Top div listbox1.ItemHeight* -1);//Beispiel
    Trackbar1.Position:= (Rect.Top div listbox1.ItemHeight* -1)
  end;
end;
Das würde bei dir aber komisch aussehen, da du eine Trackbar aber keine Scrollbar hast.

EDIT: Code nochmal geändert, funktioniert im prinzip aber genauso.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#9

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 21:14
Was heißt "Items unterhalb der Listbox" ?
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#10

Re: [TListBox] Aktuelle Scrollzeile

  Alt 13. Feb 2007, 21:20
Zitat von Nils_13:
Was heißt "Items unterhalb der Listbox" ?
Die Items, die ausgeblendet sind, sprich' "Unter'm unterstem Rand der Listbox"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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