![]() |
Listbox selber horizontal scrollen
Hi,
ich möchte das horizontale Scrolling in einer Listbox (interessehalber) per API vollständig selbst übernehmen. (Also nicht die horziontale Scrollbar anzeigen und dann automatisch horizontal scrollen, sondern WM_HSCROLL völlig selbst bearbeiten.) Ich habe dazu ein Beispiel von MS als Vorlage genutzt. ( ![]() Ich kriege es trotzdem nicht hin. Insbesondere das Rechteck mit dem fehlenden Teil nach dem Scrolling zu ermitteln und einzubauen. Weiß jemand, wie das funktioniert? Ein kleines Codeschnipsel wäre da sehr hilfreich! Danke und Grüße Mattze PS: Ich habe Delphi 7 pro. |
AW: Listbox selber horizontal scrollen
Ähm, vielleicht verstehe ich da was nicht richtig, aber ohne eingeblendete ScrollBar gibts kein WM_xSCROLL. Automatisch scrollen gibts von Windows aus sowieso nicht, erst der Anwender (oder bei Delphi Komponenten-) Code führt dann das scrolling durch.
Wobei wenn Du den SetScrollInfo() wie im MSDN-Beispiel gezeigt verwendest wird die Scrollbar sowieso angezeigt... ob du willst oder nicht. Oder willst du einfach nur zufallsgesteuert rumscrollen? |
AW: Listbox selber horizontal scrollen
Hi,
gut, nicht ganz richtig erklärt. Ich will NICHT die "normale" horizontale Scrollbar der Listbox benutzen (z. Bsp. durch Scrollwidth setzen), sondern das per API völlig selber übernehmen. GetScrollInfo, SetScrollInfo, ScrollWindow oder ScrollDC usw... Beim Scrolling nach links oder rechts wird an einer Seite immer ein "ungültiger Bereich" entstehen, der "nachgefüllt" werden muss. Diese Füllen kriege ich nicht hin, also das Rechteck aus der Listbox und ihren Items zu erzeugen und einzubauen. Das vertikale Scrolling ist relativ einfach, weil es da nur um volle Zeilen geht und man von vornherein weiß, wo man ist. Aber eben horizontal... Gruß Mattze |
AW: Listbox selber horizontal scrollen
Reicht nicht einfach das
Delphi-Quellcode:
für alle TWinControl-Ableitungen?
ScrollBy
|
AW: Listbox selber horizontal scrollen
Ach ja...
Ich habe doch deutlich geschrieben, dass ich NICHT den Automatismus von Delphi benutzen möchte, sondern alles per API selber machen möchte. (Interessehalber, wie das "intern" funktioniert.) Die aufgeführten Begriffe (bzw. Funktionen) waren nur ein Beispiel für mögliche Funktionen, die nutzbar und nötig sein KÖNNTEN. Wenn Äpfel und Birnen etwas mit Scrolling zu tun hätten, hätte ich die auch dazu geschrieben. Gruß Matthias |
AW: Listbox selber horizontal scrollen
Da du ja "weg" scrollst (egal in welche Richtung) musst du den Text neu ausgeben, versetzt um die gescrollte Breite und über eine Region so begrenzt dass nur der fehlende Bereich dargestellt werden muss.
|
AW: Listbox selber horizontal scrollen
Zitat:
(ich muß zugeben ich hab es nicht so mit Graphik aufm Rechner) Wenn ich dich richtig verstanden habe willst Du ja nicht um jeweils eine Postion/Buchstaben verschieben? Gruß K-H |
AW: Listbox selber horizontal scrollen
Hallo,
richtig. Ich will das nicht um nur einen Buchstaben verschieben, sondern, wie die Listbox es macht, um tmAveCharWidth (aus TTextMetrics), wie es die Listbox ja auch macht. Aber selbst, wenn es um einen Buchstaben ginge, wäre das schon ein Problem, da es ja nicht nur eine Zeile ist. Das mit der Ausgabe zuerst auf einen Canvas, wäre eine Idee. Allerdings vermute ich, dass dann das Prinzip ListBox (items usw.) konterkariert werden würde. Und, ob das schnell genug ist... (Mit Doubelbuffered:=true hat man ja eigentlich schon sowas. Aber, ob man an diesen versteckten Canvas rankommt und wie???) Gruß Mattze |
AW: Listbox selber horizontal scrollen
Sag mal, auf Basis welcher Komponente willst Du das umsetzten?
|
AW: Listbox selber horizontal scrollen
Hallo Whookie,
rate mal. (In welchem Bereich bin ich hier?) Auf Basis GAR KEINER Komponente. Noch mal: Ich will eine Listbox (oder ähnliches, entweder Delphi oder Windows) vollständig selber per API horizontal scrollen. Ich betone HORIZONTAL. Vertikal ist nicht sooo schwierig, weil es da meistens um definierte Sachen geht! Beim Text horizontal ist das aber nicht so einfach, weil man in der Regel nicht weiß, wie viel man gerade anzeigt, sprich: bei welchem Buchstaben des Textes die Anzeige aufhört. Wenn man dann noch den Hintergrund verschieden färbt (abhängig davon, was im Text steht, ob es eine gerade oder ungerade Zeile ist, oder ähnliches), wird es ziemlich eklig, dass fehlende Rechteck ordentlich zu bauen und einzufügen. (Nebenbei: Wenn man das mit der Färbung usw. übertreibt, wird das automatische horizontale Scrolling auch sehr langsam und ruckartig - und auch nicht mehr sauber!) Gruß Mattze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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