AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Listbox selber horizontal scrollen

Hinweise


Listbox selber horizontal scrollen

Ein Thema von Mattze · begonnen am 13. Aug 2014 · letzter Beitrag vom 17. Aug 2014
Antwort Antwort
Seite 1 von 2  1 2   
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Listbox selber horizontal scrollen

  Alt 13. Aug 2014, 13:51
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.
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
421 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Listbox selber horizontal scrollen

  Alt 13. Aug 2014, 22:03
Ä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?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Listbox selber horizontal scrollen

  Alt 14. Aug 2014, 05:34
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.372 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Listbox selber horizontal scrollen

  Alt 14. Aug 2014, 10:35
Reicht nicht einfach das ScrollBy für alle TWinControl-Ableitungen?
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

AW: Listbox selber horizontal scrollen

  Alt 14. Aug 2014, 12:52
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
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
421 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Listbox selber horizontal scrollen

  Alt 15. Aug 2014, 14:35
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.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#7

AW: Listbox selber horizontal scrollen

  Alt 15. Aug 2014, 15:05
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

AW: Listbox selber horizontal scrollen

  Alt 15. Aug 2014, 17:41
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
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
421 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Listbox selber horizontal scrollen

  Alt 17. Aug 2014, 11:32
Sag mal, auf Basis welcher Komponente willst Du das umsetzten?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#10

AW: Listbox selber horizontal scrollen

  Alt 17. Aug 2014, 13:25
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf