AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Externes Scrollen einer Listbox mithilfe der WinApi
Thema durchsuchen
Ansicht
Themen-Optionen

Externes Scrollen einer Listbox mithilfe der WinApi

Ein Thema von Konse · begonnen am 21. Okt 2007 · letzter Beitrag vom 23. Okt 2007
Antwort Antwort
Konse

Registriert seit: 20. Feb 2007
Ort: Bayern
27 Beiträge
 
Delphi 7 Professional
 
#1

Externes Scrollen einer Listbox mithilfe der WinApi

  Alt 21. Okt 2007, 17:45
Hallo zusammen,

ich möchte eine ListBox bzw. eine directoryListbox oder generell jedes Element von extern (d.h. mit einer Nachricht Windowsmessage) steuern.

eigentliches Ziel:
Ein control entwickeln, das breitere Zugriffselemente, z.b. für die directorylistbox hat:
wie z.b. grössere Schrift, grosse Icons(directoryicon), dicke scrollbar etc. hat.

erstes problem:
Das mit der Schrift und den Icons war ganz einfach , nur um die Scrollbar zu verbreitern damit habe ich ein paar probleme gehabt, und bin nahe dran zu sagen das geht nicht.

Momentaner Lösungsweg:
Habe jetzt die Scroll Fähigkeit der Listbox komplett eliminiert (disabled über winapi)
und versuche mit einer komponente TScrollbar diverse messages zu schicken um die listbox zu scrollen.
Das möchte ich dann in einer eigenen Komponente verpacken, die dann also die listbox und die scrollbar enthalten.

aktueller stand:
die scrollbar konnte ich mit hilfe der winapi richtig formatieren bzw. initialisieren, aber wenn ich über die scrollbar die listbox scrollen möchte z.b. mit scrollwindowex verschiebt sich nur der bildinhalt in dem Control nach unten, die anderen directories sieht man nicht, nur die die von anfang an in der listbox standen.


Hoffe jemand von euch weis rat, am besten mit einem netten beispiel ;-P

vielen dank
Konse
Warum ich Klingonische Programmierer so liebe:
- A true Klingon programmer does not comment his code
- You cannot truly appreciate Dilbert unless you´ve read in the original klingon
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Externes Scrollen einer Listbox mithilfe der WinApi

  Alt 21. Okt 2007, 19:34
Hallo Konse,

auch wenn die Vergrößerung der Bildlaufleiste ganz im Sinne der Barrierefreiheit ist: Die Abmessungen der Bildlaufleiste sollen nicht programmweise sondern systemweit (über die Desktop-Eigenschaften) eingestellt werden.

Fehlende Einträge in deiner ListBox werden nach dem Verschieben nicht gezeichnet, weil du das Aktualisieren des entsprechenden Bereiches nicht beauftragt hast. Probiere es mal mit der Methode Invalidate() direkt nach dem Verschieben.

Grüße vom marabu
  Mit Zitat antworten Zitat
Konse

Registriert seit: 20. Feb 2007
Ort: Bayern
27 Beiträge
 
Delphi 7 Professional
 
#3

Re: Externes Scrollen einer Listbox mithilfe der WinApi

  Alt 21. Okt 2007, 19:46
hallo marabu

invalidate hat nichts gebracht, hatte ich schon versucht, da man ja generell neu zeichnen sollte. habe invalidate direkt vom control(listbox) aufgerufen, deren inhalt über die scrollbar scheinbar(?) verschoben worden ist.

zu testzwecken habe ich mir das scrollbar von der listbox mitanzeigen lassen, das läuft parallel zu meiner eigenen scrollbar, wie gewünscht.

Inhalt wird leider nicht weiterangezeigt.




hier ein Beispiel:
Damit setze ich die werte meiner scrollbar
Delphi-Quellcode:
var
  sinfo:tagSCROLLINFO;
begin
  FillMemory(@sinfo, SizeOf(sinfo), 0);
  sinfo.cbSize:=SizeOf(sinfo);
  sinfo.fMask:=SIF_ALL;
  GetScrollInfo(self.lst1.Handle, SB_VERT, sInfo);

  self.scrlbr1.SetParams(sinfo.nPos, sinfo.nMin, sinfo.nMax);
  self.scrlbr1.PageSize:=sinfo.nPage;
damit versuche ich zu ersteinmal scrollen.
Delphi-Quellcode:
procedure TForm1.scrlbr1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
var
  r:TRect;
begin
  r:=lst1.ClientRect;
  ScrollWindowEx(lst1.Handle, 0, ScrollPos+1, 0, @r, 0, 0,SW_SCROLLCHILDREN);
  lst1.Invalidate;
end;

wäre klasse wenn mir jemand sagen könnte, wie man die listbox (lst1) einfach scrollen könnte.

vielen dank für die hilfe



PS: der wert der scrollpos ist nicht korrekt, soll hier nur ein beispiel sein.
Warum ich Klingonische Programmierer so liebe:
- A true Klingon programmer does not comment his code
- You cannot truly appreciate Dilbert unless you´ve read in the original klingon
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Externes Scrollen einer Listbox mithilfe der WinApi

  Alt 21. Okt 2007, 20:53
ScrollWindowEx() rollt die Bildzeilen im angegebenen Fenster. Alleine dadurch weiß die ListBox aber noch nicht, dass ihr TopItem sich geändert hat. Aber warum willst du das Problem über direkte API-Calls lösen? Ich würde einen eigenen ScollBar (TScrollBar) neben der ListBox platzieren und die Parameter des unsichtbar gemachten ScrollBars auf diesen ScrollBar übertragen. Wird der Thumb des eigenen ScrollBars verschoben (OnChange), dann würde ich versuchen die aktuellen Parameter an den System-ScrollBar der ListBox zu übermitteln. Wenn das funktioniert, dann hast du deinen fetten ScrollBar und der Original-ScrollBar erledigt die eigentliche Arbeit. Ansonsten kannst du über ein wenig Arithmetik (TopItem, ItemHeight, PageSize, etc.) selbst Hand anlegen.

Muss jetzt ins Bettchen - Gute Nacht.
  Mit Zitat antworten Zitat
Konse

Registriert seit: 20. Feb 2007
Ort: Bayern
27 Beiträge
 
Delphi 7 Professional
 
#5

Re: Externes Scrollen einer Listbox mithilfe der WinApi

  Alt 23. Okt 2007, 07:51
vielen lieben dank!!!

habe den wald wirklich nichtmehr vor lauter bäumen sehen können...
Warum ich Klingonische Programmierer so liebe:
- A true Klingon programmer does not comment his code
- You cannot truly appreciate Dilbert unless you´ve read in the original klingon
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:00 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