Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   04.10.17 09:42

Zitat aus der Profan-Hilfe

"Wird der Eintrag gefunden, dann wird im Falle eines sichtbaren Controls der Auswahlbalken darauf gesetzt und bei
Einzelauswahl die Liste nötigenfalls gescrollt,"

Gesucht und gefunden wird in einer sortierten Gridbox der Eintrag.
Aber es wird nicht nach oben gescrollt, wenn der Eintrag weiter unten steht.
Der Balken wird wohl draufgesetzt, ich kann mit der Scrolleiste manuell hochscrollen und sehe dann den blau unterlegten Eintrag.
Das automatische Hochscrollen findet leider nicht statt ?
Gibt es da einen Trick ?
Danke für Hilfe

Gruss
horst :-)

http://www.horst-horn.de

Nachricht bearbeitet (04.10.17 10:18)

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Sellmeyer (---.dip0.t-ipconnect.de)
Datum:   04.10.17 10:41

Probiers mal damit:

 Proc LVSetCurSel
   Parameters LV&,pos%
   Selectstring(LV&,pos%-1,Getstring$(LV&,pos%))
   SendMessage(LV&,4115,pos%,0)
 Endproc
 


_____________________________________
Man sollte seiner Zeit nicht zu weit voraus sein

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   04.10.17 14:24

Jörg
Danke für deine Hilfe
Klappt aber nicht !
Scrollt nur bis zum Ende der Anzeige und hinterlegt den letzten Eintrag blau.
Obwohl über 100 Einträge vorhanden sind
Mit SELECTSTRING(winL&,-1,name$) wird der Eintrag betont, aber nicht hochgescrollt,
Bei einer unsortierten Gridbox klappt das einwandfrei !

Gruss
horst :-)

http://www.horst-horn.de

Nachricht bearbeitet (04.10.17 14:25)

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   04.10.17 15:05

Zitat:


Bei einer unsortierten Gridbox klappt das einwandfrei !


das ist in der Tat komisch. Anscheinend hat eine sortierte Gridbox ein anderes Scrollverhalten.

Also falls du die Gridbox zur Laufzeit nicht ständig neu mit Daten befüllen mußt & sich die Datenmenge in Grenzen hält, könntest du dieses Phänomän umschiffen:

Fülle deine Daten zuerst in ein identisches, sortiertes, unsichtbares Stringgrid.
Dann von dort aus in deine UNSORTIERTE Gridbox.
Die Daten stehen ja dann trotzdem sortiert in deiner Gridbox und sie scrollt beim suchen, wie du es erwartest. :-)

Wenn das zur Laufzeit nicht zeitmäßig ins Gewicht fällt, wär das zumindest eine Notlösung mit relativ kleinen Mehr-Aufwand..

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Nachricht bearbeitet (04.10.17 15:07)

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   04.10.17 16:50

Ist ja eigenartig. Bei mir funktioniert es, wie es soll :

 Declare Handle gb, btn1, edit1, String sp, such, Long pos
 
 sp = "Nummer;0;60;Name;0;100;"
 Window 600, 400
 
 btn1  = Create("Button", %HWnd, "Suche", 10, 10, 60, 25)
 edit1 = Create("Edit",   %HWnd, "",      80, 10, 60, 25)
 gb    = Create("Gridbox", %HWnd, sp, 1,  10, 50, 180, 150)
 FuelleGB()
 
 UserMessages $0010
 WhileNot %Umessage = $0010
   WaitInput
   If Clicked(btn1)
      such = GetText$(edit1)
      If such <> ""
         pos = SelectString(gb, -1, such)
      EndIf
   EndIf
 EndWhile  
 
 Proc FuelleGB
 WhileLoop 0, 150
   AddString(gb, Str$(&LOOP) + "|" + ".Eintrag")
 EndWhile
 EndProc
 
 End
 


Oder sprechen wir da aneinander vorbei ?

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   04.10.17 17:07

@Heinz
Ich suche nicht !
In zwei Fenstern werden die Inhalte der gewünschten Laufwerke angezeigt.
"Dateiverwaltung der eigenen Art ;-) "
Wenn ich hier jetzt in eine der zwei sortierten Gridboxen eine Datei "umbewege" oder "kopiere",
wird das anstandslos gemacht und die Boxen werden aktualisiert.
Sollte aber die Datei am Ende der sortierten Gridbox-Inhalte stehen, wird sie nicht hochgescrollt.
Ich kann sie manuell über die Scollleiste hochholen und sie ist auch blau unterlegt.
Das ist aber nicht der Sinn der Sache.
Denke mal, dass der Vorschlag von Jörg eine Lösung ist.
Komme aber erst morgen zum Probieren.
Vorerst einmal Danke für deine Mühe

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   04.10.17 18:50

Wenn die eingesetzte Zeile nach dem Einfügen selektiert ist
(blau hinterlegt), sollte das doch nach dem Einfügen der
Zeile mit
SetCurSel gb, GetCurSel(gb)

gehen bzw. dorthin scrollen.

Hast du das schon mal probiert ?

Ist halt nur schade, daß AddString() keine Listenposition
zurück gibt, sondern nur Erfolg oder nicht. Oder doch ?

Habe obigen Code etwas geändert :


 Declare Handle gb, btn1, edit1, String sp, such, Long pos, z
 
 sp = "Nummer;0;60;Name;0;100;"
 Window 600, 400
 
 btn1  = Create("Button", %HWnd, "Suche", 10, 10, 60, 25)
 edit1 = Create("Edit",   %HWnd, "",      80, 10, 60, 25)
 gb    = Create("Gridbox", %HWnd, sp, 1,  10, 50, 180, 150)
 FuelleGB()
 
 UserMessages $0010
 WhileNot %Umessage = $0010
   WaitInput
   If Clicked(btn1)
      such = GetText$(edit1)
      If such <> ""
         pos = SelectString(gb, -1, such)
      EndIf
   EndIf
 EndWhile
 
 Proc FuelleGB
 WhileLoop 0, 150
   z = AddString(gb, Str$(&LOOP) + "|" + ".Eintrag")
   SetCurSel gb, z
 EndWhile
 EndProc
 
 End
 


Das scheint irgendwie doch zu funktionieren :-?
Als letzter Eintrag wird die 150 markiert, was auch dem letzten
AddString() entspricht. Bloß hängt der halt in der Mitte wegen
der ASCII-Sortierung.

Horst, müßtest du mal für deinen Fall ausprobieren ?

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   04.10.17 21:49

Jo Heinz, bei mir löppelt dein Code, wie er soll. Im Interpreter als auch compiliert.
Getestet mit X2.1 und X3.1 unter Win7-pro 64.
GridBox scrollt wie verrückt. :-)

Win10 hab ich nicht - vllt. liegt es daran?

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   05.10.17 09:45

Ach Horst, was mir eben grad einfällt:
Dieses scrollen funzt aber nur, wenn du als Stil 1 oder 0 definiert hast.
Also bei Mehrfachauswahl klappt das nicht.
Da du Dateien verwaltest, liegt es ja nahe, daß du diese Funktionalität aktiviert hast...

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   05.10.17 09:51

@Jörg
Du sprichst es selbst an und damit steht fest:
Meine Gridboxen haben als Status 3
1 = Sortiert, 2 = Mehrfachauswahl, zusammen 3
Wenn ich jetzt im Code die 3 hinstelle, wird alles betont.
Das ist nicht der Sinn.
Zusätzlich muss ich auch euren Code umschreiben.
Da ich noch mit Declarationen der alten Art schreibe, kann mir da schon ein Fehler unterlaufen. (Das soll keine Kritik sein !)
Durch euren Code bin ich aber dem Problem auf der Spur.
Melde mich wieder.
Schönen Tag an alle :-)

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   05.10.17 18:30

Da ich annehme, daß du während des Füllens der
Gridbox nicht noch Einträge markierst (so schnell
wirst du auch nicht sein), könnte man doch vor dem
Befüllen der Gridbox den Stil derselben kurzfristig ändern.

 oldstyle = GetStyle(gb, 1)
 newstyle = ? ' hier müßte man dann schauen
 SetStyle gb, 1, newstyle
 FuelleGB()  ' Füllen der Gridbox
 SetStyle gb, 1, oldstyle
 


Also, so ähnlich wie das beim SubClassing mit dem
Umbiegen der WindowProc gemacht wird.
oldproc = GetWindowProc(....)
....
zum Schluß wieder
SetWindowProc oldproc

Man müßte ja nur herausbekommen, welchen Wert das
Multiselect hat. Entweder man frimelt das Multiselect
aus oldstyle heraus und bestückt so newstyle oder man
setzt newstyle ganz neu mit LVS_REPORT|LVS_GRIDLINES usw.

Wäre jetzt mal eine Idee von mir, falls es denn wirklich mit der
Mehrfachauswahl zusammen hängt. Vielleicht gibt es ja hier ein
paar Profis, die sich besser mit der API bzw. den Stilen auskennen.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   05.10.17 19:17

Halt, zurück.
Geht doch nicht, da laut MSDN das Setzen der Einzelauswahl bzw.
Mehrfachauswahl nur beim Erstellen der Gridbox möglich ist.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   06.10.17 11:09

Solange Horst den Stil für Mehrfachauswahl (3 oder 2) für diese Gridboxen verwendet, wird es mit dem scrollen via SelectString... nicht funktionieren.
So stehts ja auch in der Hilfe...

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   06.10.17 11:27

Jörg und Heinz
Werde mal den Tipp von Jörg versuchen:
Eine unsichtbare Stringgrid vorschalten und von da in die Gridbox einlesen.
Vielleicht liest ja auch Roland mit und hat ein Workshop parat ! ;-)
Danke an alle

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   06.10.17 11:52

Ich befürchte, daß dieser Tipp nicht dein Problem lösen wird.
Weil zu diesem Zeitpunkt bin ich noch davon ausgegangen, das dieses Scrollverhalten von der Sortierung ausgelöst wird.
Tut es aber nicht, wie Heinz es ja auch demonstriert hat.

Die Ursache ist die Mehrfachauswahl (Stil 2 oder 3)

Wenn du ohne die Mehrfachauswahl auskommst & nur Sortierung (Stil 1) einstellst, wird deine Box scrollen, wie du es erwartest.

Dein Feind ist also die Mehrfachauswahl. Und da bringt auch ein vorgeschaltetes StringGrid nix, leider.

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   06.10.17 12:04

Jörg
Gridbox mit 0 funktioniert einwandfrei. Das weiß ich.
Sieht aber blöde aus, wenn Ordner und Dateien wild durcheinander angezeigt werden.
Durch das Vorstellen von CHR$(32) für Ordner mit UPPER$(...)
und CHR$(160) für Dateien habe ich ja eine Unterscheidung (bei Frank Abbing abgeguckt ;-) )
Das ist dann bei Status 0 alles für die Katz
Frank hat das in seiner DLL hinbekommen, die will ich aber nicht nutzen.#
Was mir vorschwebt, ist ein CLON vom NORTON-COMMANDER nur mit den damaligen Möglichkeiten.
Die heutigen Dateiverwaltungen sind mir alle zu überladen.
Mein Teil funktioniert "sauschnell", nur dieses Scrollen ist ein Problem ! :cry:

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   06.10.17 12:34

nimm Stil 1 (für sortiert)
Nicht 0

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   06.10.17 12:42

Zitat:


Was mir vorschwebt, ist ein CLON vom NORTON-COMMANDER nur mit den damaligen Möglichkeiten.
....
Mein Teil funktioniert "sauschnell", nur dieses Scrollen ist ein Problem ! :cry:


Das hört sich gut an. Und "schnell" ist immer eine willkommene Eigenschaft ;-)

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   06.10.17 12:42

Jörg
Wie immer hast du Recht.
War die berühmte Freud'sche Fehlleistung ! :-)
Mit 1 klappt es, aber leider ist dann die Mehrfachauswahl nicht möglich.
Aber wie singt Helene Fischer ?
"Keiner ist fehlerfrei"
Auch XPROFAN ist nicht fehlerfrei ! ;-)

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Horst Horn (---.hsi14.kabel-badenwuerttemberg.de)
Datum:   06.10.17 13:04

Muss noch die (unbeliebte) Hilfe schreiben.
Wenn alles soweit klappt, stelle ich am Wochenende eine 1. Version auf meine HP zum Download bereit.
Kannst ja dann testen. Meckern erwünscht ! ;-)

Gruss
horst :-)

http://www.horst-horn.de

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   06.10.17 13:09

Gerne :-)

Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   06.10.17 22:22

Was ich noch hinzu fügen wollte :
Wenn SetCurSel sowohl mit Listboxen als auch
mit Gridboxen funktioniert, müßte doch auch
ein Entmarkieren der List/Gridboxen machbar sein.

Ich könnte mir da sowas vorstellen :

 Proc FuelleGB
 oldpos& = 0
 WhileLoop 0, 150
   SetCurSel gb,  oldpos&, 0 ' oder 3 für alle entmarkieren
   z = AddString(gb, Str$(&LOOP) + "|" + ".Eintrag")
   oldpos& = z
   SetCurSel gb, z, 1
 EndWhile
 EndProc
 
 


Man hat ja in der Schleife höchstens zwei Einträge, die
markiert sind (den alten von vorher und den neuen).

Wobei SetCurSel einen dritten Parameter hätte, der
angibt, ob markiert oder entmarkiert wird. Roland hat
ja einige Funktionen, die sowohl bei Listboxen als auch bei
Gridboxen greifen.

Hier wäre der dritte Parameter so zu interpretieren :

0 = Entmarkieren
1 = markieren
2 = Alle markieren
3 = Alle Entmarkieren

Oder halt SetCurSel so lassen, wobei dann erkannt wird,
ob markiert oder entmarkiert ist und dann umgekehrt
verfahren wird. Das wäre dann so eine Multi-Funktion,
die sowohl Listboxen als auch Gridboxen abdeckt.

Aber ersteres wäre natürlich optimaler.

Vielleicht hat ja Roland dazu eine Idee.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   07.10.17 10:24

Hallo Horst,
Beim Durchforsten der Foren habe ich inzwischen
eine Lösung für dich gefunden, die auch bei Mehrfachauswahl
funktioniert.

Probiere mal das aus :
 $H commctrl.ph
 Declare Handle gb, btn1, String sp
 
 sp = "Nummer;0;60;Name;0;100;"
 Window 600, 400
 
 btn1  = Create("Button", %HWnd, "Fülle", 10, 10, 60, 25)
 gb    = Create("Gridbox", %HWnd, sp, 3,  10, 50, 180, 150)
 
 FuelleGB()
 
 UserMessages $0010
 WhileNot %Umessage = $0010
   WaitInput
   If Clicked(btn1)
      ClearList gb
      FuelleGB()
   EndIf
 EndWhile
 
 Proc FuelleGB
 Declare Long z
 z = 0
 WhileLoop 0, 150
   LvDeSelect(gb, -1) ' alle deselektieren
   z = AddString(gb, Str$(&LOOP) + "|" + ".Eintrag")
   LvSelect(gb, z)
   SetCurSel gb, z
 EndWhile
 EndProc
 
 Proc LvDeSelect
 Parameters Lv&,Item&
  Declare s#
  Dim s#,1024
  Long s#,12=0
  Long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
  SendMessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
  Dispose s#
 EndProc
 
 Proc LvSelect
 Parameters Lv&,Item&
 Declare s#
 Dim s#,1024
 Long s#,12=$2
 Long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
 SendMessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
 SendMessage(lv&,~LVM_SETHOTITEM ,item&,0)
 SendMessage(lv&,~LVM_ENSUREVISIBLE ,Item&,0)
 Dispose s#
 Endproc
 
 End
 
 


Man muß nur SetCurSel zusätzlich benutzen, damit der
Balken auch blau statt grau hinterlegt wird.
Ich hoffe, ich konnte dir helfen.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (07.10.17 10:31)

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Jörg Greve (---.dip0.t-ipconnect.de)
Datum:   13.10.17 15:26

Hallo Heinz,
dein Beispiel funktioniert super. Ist genau das, was Horst gesucht hat, weil er damit nicht auf die Mehrfachauswahl verzichten muß.
Ist wirklich ein wertvoller Schnipsel, dein Beispiel :-)

Mit ist beim Testen aufgefallen, daß du in 'FuelleGB' den SelectionsVorgang in der Füll-Schleife (also 150x) machst. War das zu Demo-Zwecken beabsichtigt?

Hab dies mal so abgeändert, das nach dem Füllen dann nur 1x selctiert wird.
Die drei Schritte dann nochmals zu einer Proc gebündelt.

Horst bräuchte jetzt nur die 3 Procs "LvDeSelect", "LvSelect", "LvScroll" einfügen, das GridBoxHandle anpassen und das Ergebnis von SelectString(N1,N2,S) an "LvSroll" schicken:
 LvScroll SelectString(gb,-1,"Dateiname")


Hier noch mal dein Code zur Demo leicht angepasst:
 'scrollt eine gridbox mit den selct()-befehl auch, wenn sie den status 2 oder 3 (mehrfachauswahl) hat.
  $H commctrl.ph
  Declare Handle gb, btn1, String sp
  
  sp = "Nummer;0;60;Name;0;100;"
  Window 600, 400
  
  btn1  = Create("Button", %HWnd, "Fülle", 10, 10, 60, 25)
  gb    = Create("Gridbox", %HWnd, sp, 3,  10, 50, 180, 150)
  
  FuelleGB()
  
  UserMessages $0010
  WhileNot %Umessage = $0010
    WaitInput
    If Clicked(btn1)
       ClearList gb
       FuelleGB()
    EndIf
  EndWhile
  
  Proc FuelleGB
  Declare Long z
  z = 0
  WhileLoop 0, 150   
    z = AddString(gb, Str$(&LOOP) + "|" + ".Eintrag")   
  EndWhile
  '------------ dient hier nur zur demo ---------------
  LvScroll z ' den letzten eintrag in den sichbaren bereich scrollen (Demo)
  Sleep 2000
  LvScroll SelectString(gb,-1,"87") 'den Wert 87 suchen und hinscrollen (Demo)
  '--------------------------------------------------------------------------
  EndProc
  
  Proc LvScroll
  'scrollt den eintrag mit den gewünschten index in den sichbaren bereich
   Parameters ix&     'index, dessen zeile in den sichbaren bereich kommen soll
   LvDeSelect(gb, -1) ' alle deselektieren
   LvSelect(gb, ix&)  'in den sichbaren bereich scrollen
   SetCurSel gb, ix&  'blau machen
  EndProc
  
  Proc LvDeSelect
  Parameters Lv&,Item&
   Declare s#
   Dim s#,1024
   Long s#,12=0
   Long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
   SendMessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
   Dispose s#
  EndProc
  
  Proc LvSelect
  Parameters Lv&,Item&
  Declare s#
  Dim s#,1024
  Long s#,12=$2
  Long s#,16=~LVIS_SELECTED | ~LVIS_FOCUSED
  SendMessage(Lv&,~LVM_SETITEMSTATE,Item&,s#)
  SendMessage(lv&,~LVM_SETHOTITEM ,item&,0)
  SendMessage(lv&,~LVM_ENSUREVISIBLE ,Item&,0)
  Dispose s#
  Endproc
  
  End


Gruß Jörg

Ideen gibt es viele - man muss sie nur haben...
XProfan X2.1, X3.1 / XP-Pro, Win7-Pro (32/64) / Linux Mint-Mate, AntiX

Beitrag beantworten
 
 Re: Selectstring... scrollt nicht
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   13.10.17 17:25

Hallo Jörg,
Natürlich macht es Sinn, nur einmal am Schluß dorthin
zu scrollen. Ich hatte Horst aber so verstanden, daß der
Balken bei jedem AddString() gesetzt wird.

PS: Habe gerade versucht, eine Gridbox nach Datum zu
sortieren. Vielleicht könnt ihr(oder jemand) das ja
gebrauchen :

 /* HAUPTPROGRAMM */
 Declare Handle gb, btn1, btn2, btn3, btn4, btn5, btn6, Long ende
 Window 600, 400
 btn1 = Create("Button", %HWnd, "ASC",  10, 10, 60, 25)
 btn2 = Create("Button", %HWnd, "DESC", 10, 40, 60, 25)
 btn3 = Create("Button", %HWnd, "ASC",  100, 10, 60, 25)
 btn4 = Create("Button", %HWnd, "DESC", 100, 40, 60, 25)
 btn5 = Create("Button", %HWnd, "ASC",  190, 10, 60, 25)
 btn6 = Create("Button", %HWnd, "DESC", 190, 40, 60, 25)
 gb   = Create("Gridbox",%HWnd, "DATUM;0;80;MENGE;0;80;ARTIKEL;0;120", 0, 10, 70, 300, 150)
 
 AddString(gb, "20.10.2015|500|Tomaten")
 AddString(gb, "15.12.2017|200|Birnen")
 AddString(gb, "22.11.2015|100|Ananas")
 AddString(gb, "10.04.2016|50|Äpfel")
 AddString(gb, "11.10.2017|1000|Zitronen")
 AddString(gb, "01.04.2017|1500|Kirschen")
 
 ende = 0
 WhileNot ende
   WaitInput
   If Clicked(btn1)
      SortListview(gb, 0, 2, 0)
   ElseIf Clicked(btn2)
      SortListview(gb, 0, 2, 1)
   ElseIf Clicked(btn3)
      SortListview(gb, 1, 3, 0)
   ElseIf Clicked(btn4)
      SortListview(gb, 1, 3, 1)
   Elseif Clicked(btn5)
      SortListview(gb, 2, 1, 0)
   ElseIf Clicked(btn6)
      SortListview(gb, 2, 1, 1)
   EndIf
   Case %Key = 2 : ende = 1
 EndWhile
 
 END
 
 PROC SortListview
 ' ACHTUNG   : verwendet die interne Listboxliste (eigene Daten vorher mit Move o.ä. sichern)
 ' lv        : Handle der Gridbox
 ' spalte    : Nullbasierend (1. Spalte = 0)
 ' SortType  : Spalteninhalt (1 = STRINGS, 2 = DATUM (tt.mm.jjjj), 3 = ZAHLEN)
 ' Order     : 0 = aufsteigend, 1 = absteigend
 Parameters Handle lv, Long spalte, SortType, Order
 DECLARE Handle liste, LONG sOrder, sTyp, STRING item, zeile, Float datum
 liste = Create("List", 0)
 
 SELECT SortType
   CASEOF 1
      sTyp = 4 ' entsprechend Gebietsschema
   CASEOF 2
     sTyp = 5
   CASEOF 3
     sTyp = 5
 ENDSELECT
 Select Order
   CaseOf 0
      sOrder = 1
   CASEOF 1
      sOrder = -1
 ENDSELECT
 
 IF SortType = 2 ' DATUM - SORTIERUNG
   CLEARLIST 0
   MOVE("HandleToList", lv)
   WHILELOOP 0, GETCOUNT(0) -1
     item = SubStr$(GetSTRING$(0, &LOOP), spalte + 1, "|")
     datum = Str$(DT("SetDate", item))
     zeile = Translate$(GetString$(0, &LOOP), item, Str$(datum))
     AddString(liste, zeile)
   ENDWHILE
   CLEARLIST 0
   MOVE("HandleToList", liste)
   SortList "|", spalte + 1, (sTyp * sOrder)
   CLEARLIST liste
   MOVE("ListToHandle", liste)
   CLEARLIST 0
   WHILELOOP 0, GETCOUNT(liste) - 1
     item = SubStr$(GetString$(liste, &LOOP), spalte + 1, "|")
     zeile = Translate$(GetString$(liste, &LOOP), item, DT("GetDate", 0, VAL(item)))
     AddString(0, zeile)
   ENDWHILE
 ELSE
   CLEARLIST 0
   MOVE("HandleToList", lv)
   SortList "|", spalte + 1, (sTyp * sOrder)
 ENDIF
 CLEARLIST lv
 MOVE("ListToHandle", lv)
 CLEARLIST 0
 ENDPROC
 


Geht aber erst ab XProfan X3 wegen Sortlist.
Kann man natürlich auch etwas aufwändiger für Spaltenbuttons
nutzen.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org