Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Listbox selber horizontal scrollen (https://www.delphipraxis.net/181426-listbox-selber-horizontal-scrollen.html)

Mattze 13. Aug 2014 13:51

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.
(http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx)

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.

Whookie 13. Aug 2014 22:03

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?

Mattze 14. Aug 2014 05:34

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

Der schöne Günther 14. Aug 2014 10:35

AW: Listbox selber horizontal scrollen
 
Reicht nicht einfach das
Delphi-Quellcode:
ScrollBy
für alle TWinControl-Ableitungen?

Mattze 14. Aug 2014 12:52

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

Whookie 15. Aug 2014 14:35

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.

p80286 15. Aug 2014 15:05

AW: Listbox selber horizontal scrollen
 
Zitat:

Zitat von Mattze (Beitrag 1268616)
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...

Das kommt auf den verwendeten Font an. Ich würde den Text auf eine beliebige canvas ausgeben und dann den Ausschnitt der für die Anzeige benötigt wird herauskopieren.
(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

Mattze 15. Aug 2014 17:41

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

Whookie 17. Aug 2014 11:32

AW: Listbox selber horizontal scrollen
 
Sag mal, auf Basis welcher Komponente willst Du das umsetzten?

Mattze 17. Aug 2014 13:25

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 01:32 Uhr.
Seite 1 von 2  1 2   

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