Keyboard Shortcuts - Suche in einem Tree Gadget
Verfasst: 04.06.2015 12:29
Gegeben sei ein TreeGadget, gefüllt mit Items, sowie ein StringGadget für einen zu suchenden Text und Keyboard Shortcuts, die an das Window
angefügt wurden.Sowie noch zwei Buttons, um hoch oder runter zu suchen.
Ich möchte den Text in dem StringGadget im Text aller Items des TreeGadgets suchen.Das gefundene Item wird mittels SetGadgetState(Tree_0,Item)
ausgewählt.Damit das Item auch als ausgewählt angezeigt wird ( blau hinterlegt), muß ich SetActiveGadget(Tree_0) verwenden.
Über die Buttons funktioniert das erstmal wie gewünscht.Zur Vereinfachung möchte ich die Suche auch über die Keyboard Shortcuts steuern,
aber da ich zwei solche StringGadgets als Suchboxen habe, muß ich irgendwie das jeweils aktive StringGadget ermitteln.Bisher mache ich
das über GetActiveGadget(), aber da ich das TreeGadget active setzen muß, damit es das selektierte Item blau unterlegt anzeigt, funktioniert
das so nicht mehr, da ja dann das TreeGadget das aktive Gadget ist und keines der StringGadgets, wo ich dann z.B. Enter drücke.
Wenn ich das TreeGadget mit dem Flag #PB_Tree_AlwaysShowSelection erstelle, funktioniert es fast gewünscht, allerdings wird dann das
selektierte Item nur grau statt blau hinterlegt markiert.Außerdem kann ich dieses Flag über den integrierten FormDesigner auch nicht setzen.
Obwohl es nicht dokumentiert ist, habe ich rausgefunden, dass
SetGadgetAttribute(Tree_0, #PB_Tree_AlwaysShowSelection, 1 )
trotzdem funktioniert, womit ich zumindest das FormDesigner Problem umgehen kann.
Wer hat noch eine Idee, wie man das aktive StringGadget für die KeyBoardShortcuts ermitteln kann und trotzdem
das selektierte Item im TreeGadget blau hinterlegen kann ( also dann vermutlich ohne die Verwendung von
SetActiveGadget(Tree_0) ...).
Der Code funktioniert wie erwartet, das ist also kein Fehler, mehr eine Frage des Designs ( und das man
Keyboard Shortcuts eben nur an ein Window und nicht an ein Gadget binden kann - zumindest ist das
mein Stand).
Ich habe schon überlegt, mir evtl. das StringGadget zu merken, wo zuletzt ein Text eingetippt wurde
und dann die Annahme tätige, dieses ist das Suchfeld, wo die Shortcust angewendet werden sollen
( also z.B. Enter für nächstes / weitersuchen in meinem Fall).
Aber vielleicht gibts ja noch bessere Lösungen, evtl. über WinAPI ?
Vielen Dank im voraus schonmal...
TWELVE
angefügt wurden.Sowie noch zwei Buttons, um hoch oder runter zu suchen.
Ich möchte den Text in dem StringGadget im Text aller Items des TreeGadgets suchen.Das gefundene Item wird mittels SetGadgetState(Tree_0,Item)
ausgewählt.Damit das Item auch als ausgewählt angezeigt wird ( blau hinterlegt), muß ich SetActiveGadget(Tree_0) verwenden.
Über die Buttons funktioniert das erstmal wie gewünscht.Zur Vereinfachung möchte ich die Suche auch über die Keyboard Shortcuts steuern,
aber da ich zwei solche StringGadgets als Suchboxen habe, muß ich irgendwie das jeweils aktive StringGadget ermitteln.Bisher mache ich
das über GetActiveGadget(), aber da ich das TreeGadget active setzen muß, damit es das selektierte Item blau unterlegt anzeigt, funktioniert
das so nicht mehr, da ja dann das TreeGadget das aktive Gadget ist und keines der StringGadgets, wo ich dann z.B. Enter drücke.
Wenn ich das TreeGadget mit dem Flag #PB_Tree_AlwaysShowSelection erstelle, funktioniert es fast gewünscht, allerdings wird dann das
selektierte Item nur grau statt blau hinterlegt markiert.Außerdem kann ich dieses Flag über den integrierten FormDesigner auch nicht setzen.
Obwohl es nicht dokumentiert ist, habe ich rausgefunden, dass
SetGadgetAttribute(Tree_0, #PB_Tree_AlwaysShowSelection, 1 )
trotzdem funktioniert, womit ich zumindest das FormDesigner Problem umgehen kann.
Wer hat noch eine Idee, wie man das aktive StringGadget für die KeyBoardShortcuts ermitteln kann und trotzdem
das selektierte Item im TreeGadget blau hinterlegen kann ( also dann vermutlich ohne die Verwendung von
SetActiveGadget(Tree_0) ...).
Der Code funktioniert wie erwartet, das ist also kein Fehler, mehr eine Frage des Designs ( und das man
Keyboard Shortcuts eben nur an ein Window und nicht an ein Gadget binden kann - zumindest ist das
mein Stand).
Ich habe schon überlegt, mir evtl. das StringGadget zu merken, wo zuletzt ein Text eingetippt wurde
und dann die Annahme tätige, dieses ist das Suchfeld, wo die Shortcust angewendet werden sollen
( also z.B. Enter für nächstes / weitersuchen in meinem Fall).
Aber vielleicht gibts ja noch bessere Lösungen, evtl. über WinAPI ?
Vielen Dank im voraus schonmal...
TWELVE