Hi
Leider hab ich weder per API noch per Anleitung einen Weg gefunden einen Active Line Rahmen hinzukriegen der
innen hohl ist.
Also wie hier
Weis jemand wie das geht ?
Da ich grade was bastel das per Shift+Click & Strg+Click die Einträge Rot markiert (also wie in TCMD) hab
ich entweder die Möglichkeit nach so einem Event die blaue 0815 Windows Standard Markierung entfernen zu lassen, damit
mann auch direkt sieht das die Zeile die mann zuletzt angeklickt hat auch per Farbe markiert wurde, oder mann lässt die 0815 Markerung die natürlich die Rote Schrift auf Weiß, nicht sichtbar macht.
Active Line Rahmen a'la Total Commander, DoubleCommander
- GlassJoe
- Beiträge: 108
- Registriert: 11.06.2017 20:25
- Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400
Active Line Rahmen a'la Total Commander, DoubleCommander
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Re: Active Line Rahmen a'la Total Commander, DoubleCommander
Das sieht mir nicht nach einen Standard-Control/Gadget aus.
Was mir aber einfällt, man könnte das Zeichnen des Hintergrundes selbst übernehmen und beim passenden Eintrag ein Rahmen ziehen. Geht mit Windows-Callback und Costum-draw-irgendwas-Nachricht.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
edit: Kann man den Forum beibringen, das URLs auch Klammern etc. enthalten können?
Was mir aber einfällt, man könnte das Zeichnen des Hintergrundes selbst übernehmen und beim passenden Eintrag ein Rahmen ziehen. Geht mit Windows-Callback und Costum-draw-irgendwas-Nachricht.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
edit: Kann man den Forum beibringen, das URLs auch Klammern etc. enthalten können?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: Active Line Rahmen a'la Total Commander, DoubleCommander
Normalerweise hast du doch automatisch einen Fokusrahmen, nachdem du auf einen Eintrag geklickt hast und danach auf eine freie Stelle:
Wenn du dafür sorgst, dass die Markierung nach dem Klick automatisch aufgehoben wird, dann ist es schon mal das, was du haben möchtest:
Vorher könntest du den ausgewählten Eintrag mit SetGadgetItemColor() blau einfärben, aber wie ich gerade sehe, wird das beim ExplorerListGadget nicht unterstützt, sondern nur beim ListIconGadget.
Wahrscheinlich oder vielleicht gibt es eine WinAPI-Funktion zum Einfärben. Z.B. mit SetBkMode_()
\\Edit:
Noch besser klappt es mit einem Callback:
Dann ist die blaue Markierung überhaupt nicht mehr zu sehen.
Wenn du dafür sorgst, dass die Markierung nach dem Klick automatisch aufgehoben wird, dann ist es schon mal das, was du haben möchtest:
Code: Alles auswählen
EnableExplicit
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerListGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "C:\", 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Select EventType()
Case #PB_EventType_Change
SetGadgetItemState(1, -1, 0)
EndSelect
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Wahrscheinlich oder vielleicht gibt es eine WinAPI-Funktion zum Einfärben. Z.B. mit SetBkMode_()
\\Edit:
Noch besser klappt es mit einem Callback:
Code: Alles auswählen
EnableExplicit
Procedure WindowCallback(hwnd,uMsg,wParam,lParam)
Protected *NMHDR.NMHDR
Select uMsg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
If *NMHDR\hwndFrom = GadgetID(1)
Select *NMHDR\code
Case #LVN_ITEMCHANGED
SetGadgetItemState(1, -1, 0)
EndSelect
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerListGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "C:\", 0)
SetWindowCallback(@WindowCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
- GlassJoe
- Beiträge: 108
- Registriert: 11.06.2017 20:25
- Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400
Re: Active Line Rahmen a'la Total Commander, DoubleCommander
Danke GPI & RS
@GPI
Isch schau mir das mal an, ich hoffe es geht mit nem Flag ohne 3494985 zusätzliche Api Zeilen.
@RS
Also ich arbeite sowieso mit einem ListIconGadget (d.H gibt es auch keinen Focus Rahmen beim aufheben) da ich einen Aufbau wie mit dem TCMD b.z.w DBLCMD haben will.
Einen Callcback hab ich schon drin gehabt (allerdings ohne #LVN_ITEMCHANGED) zwecks Column Click Sort usw
Allerdings funzt das bei mir auch nicht mit #LVN_ITEMCHANGED.
Sobald ich Strg+Click mache wird die Schrift rot eingefärbt, aber mann sieht es nicht wegen der Auswahlmarkierung (hab GridLines aus) oder sie verschwindet, weil ich sie danach per SetGadgetItemState(x,x,0) verschwinden lasse.
Die normale Windows Shift+Click Methode mit Roter Schrift Markierung hab ich auch hingekriegt.
Bei jedem Click auf die List wird im Main Code die zuletzt geklickte Reihe erfasst.
Und im Callback dann wenn ShiftKeyEvent auf True steht (hab im Main Code EventWParam drin, und die Variable Shared im Callback) und Single Click im #W1_FileExplorer wird sozusagen die End Row Markierung gesetzt, und innerhalb vom Callback die Rot Makierungs Prozedure gestartet.
Funzt wunderbar, nur hab ich da auch wieder das Problem mit dem fetten Auswahl Rahmen, lass ich die Auswahl aufheben (hab MultiSelect im ListIconGadget extra aus) ist das unter umständen bisschen verwirrend für's Auge, mann könnte in einer dicken Dateiliste vl aus der zuletzt angeklickten (während mann Shift gehalten hat) Zeile mit'm Auge kommen, dh wäre ein Fokus Rahmen gut.
@GPI
Isch schau mir das mal an, ich hoffe es geht mit nem Flag ohne 3494985 zusätzliche Api Zeilen.
@RS
Also ich arbeite sowieso mit einem ListIconGadget (d.H gibt es auch keinen Focus Rahmen beim aufheben) da ich einen Aufbau wie mit dem TCMD b.z.w DBLCMD haben will.
Einen Callcback hab ich schon drin gehabt (allerdings ohne #LVN_ITEMCHANGED) zwecks Column Click Sort usw
Allerdings funzt das bei mir auch nicht mit #LVN_ITEMCHANGED.
Sobald ich Strg+Click mache wird die Schrift rot eingefärbt, aber mann sieht es nicht wegen der Auswahlmarkierung (hab GridLines aus) oder sie verschwindet, weil ich sie danach per SetGadgetItemState(x,x,0) verschwinden lasse.
Die normale Windows Shift+Click Methode mit Roter Schrift Markierung hab ich auch hingekriegt.
Bei jedem Click auf die List wird im Main Code die zuletzt geklickte Reihe erfasst.
Code: Alles auswählen
If Event = #W1_FileExplorer
If EventType() = #PB_EventType_LeftClick
Main_FirstClickRow = GetGadgetState(#W1_FileExplorer)
ElseIf EventType() = #PB_EventType_LeftDoubleClick
FillExplorerFileList(1)
EndIf
EndIf
Funzt wunderbar, nur hab ich da auch wieder das Problem mit dem fetten Auswahl Rahmen, lass ich die Auswahl aufheben (hab MultiSelect im ListIconGadget extra aus) ist das unter umständen bisschen verwirrend für's Auge, mann könnte in einer dicken Dateiliste vl aus der zuletzt angeklickten (während mann Shift gehalten hat) Zeile mit'm Auge kommen, dh wäre ein Fokus Rahmen gut.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶