Page 1 sur 2

[Window] Launcher d'applications & co

Publié : sam. 28/nov./2015 20:39
par falsam
PureBasic 5.40 minimum.

Un code minimaliste montrant comment glisser une application, un fichier, un dossier, un raccourci, une url sur un des emplacement de ce launcher.

Cliquer et c'est lancer.

Code : Tout sélectionner

EnableExplicit

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #Canvas0 = 0
  #Canvas9 = 9
EndEnumeration

Global NewMap Launcher.s()

Declare MainFormOpen()
Declare OnDropFile()
Declare GetAssociatedFileIcon(IconPath.s, IconSize)
Declare OnClick()
Declare MainFormClose()

MainFormOpen()

Procedure MainFormOpen()
  Protected Gadget
  
  InitNetwork()
  UsePNGImageDecoder() 
  
  If OpenWindow(#MainForm, 0, 0, 0, 350, "MemoLink", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget) 
    SetWindowColor(#MainForm, RGB(128, 128, 128))
  
    For Gadget = #Canvas0 To #Canvas9
      CanvasGadget(Gadget, 1, Gadget*34 + 3, 127, 32)
      EnableGadgetDrop(Gadget, #PB_Drop_Text,  #PB_Drag_Copy)
      EnableGadgetDrop(Gadget, #PB_Drop_Files, #PB_Drag_Copy)
      BindGadgetEvent(Gadget, @OnClick(), #PB_EventType_LeftClick)
    Next
    
    WindowBounds(#MainForm, 130, 35, 130, 1000)
    StickyWindow(#MainForm, #True) ;Toujours en avant
    
    BindEvent(#PB_Event_GadgetDrop, @OnDropFile()) 
    BindEvent(#PB_Event_CloseWindow, @MainFormClose())
        
    Repeat : WaitWindowEvent(10) : ForEver 
  EndIf
EndProcedure

Procedure OnDropFile()
  Protected Gadget = EventGadget()
  Protected ItemIcon, ItemText.s, *Buffer, DomainUrl.s
  
  Select EventDropType()
    Case #PB_Drop_Text 
      Itemtext = EventDropText() ;Return text
      
      ;Recupération du favicon 
      DomainUrl =  StringField(ItemText, 3, "/")
      If DomainUrl =""
        DomainUrl = ItemText
      EndIf
      
      *Buffer = ReceiveHTTPMemory("http://www.google.com/s2/favicons?domain=" + DomainUrl) 
      
      If *Buffer
        ItemIcon = CatchImage(#PB_Any, *Buffer, MemorySize(*Buffer))
        FreeMemory(*Buffer)
        ItemIcon = ImageID(ItemIcon)
      EndIf
      
    Case #PB_Drop_Files
      ItemText = StringField(EventDropFiles(), 1, Chr(10)) ;Return file, shortcut, folder, etc ....
      ItemIcon = GetAssociatedFileIcon(ItemText, #SHGFI_LARGEICON)    
  EndSelect
  
  StartDrawing(CanvasOutput(Gadget))
  Box(0, 0, 127, 32, RGBA(255, 255, 255, 0))
  DrawingMode(#PB_2DDrawing_AlphaBlend)
  DrawImage(ItemIcon, 0, 0, 32, 32)
  StopDrawing()
  
  AddMapElement(Launcher(), Str(Gadget))
  Launcher() = ItemText
  GadgetToolTip(Gadget, GetFilePart(ItemText))

EndProcedure

;Retrieves the icon associated to a file (By Goznal)
;Récupère l'icône associée à un fichier
Procedure GetAssociatedFileIcon(IconPath.s, IconSize)
  Protected FileInfo.SHFILEINFO
  ; http://msdn.microsoft.com/en-us/library/bb762179%28VS.85%29.aspx
  ; IconSize peut prendre les valeur ci-dessous :
  ; IconSize can take the value :
  ; #SHGFI_SMALLICON     -> small (usually 16x16) icon
  ; #SHGFI_LARGEICON     -> large (usually 32x32) icon
  ; #SHGFI_SHELLICONSIZE -> shell default icon size
  SHGetFileInfo_(IconPath, 0, @FileInfo, SizeOf(SHFILEINFO), #SHGFI_ICON | IconSize) 
  ProcedureReturn FileInfo\hIcon 
EndProcedure

Procedure OnClick()
  Protected Gadget = EventGadget()
  
  If FindMapElement(Launcher(), Str(Gadget))
    RunProgram(Launcher())
  EndIf
EndProcedure

;Your end code here (Example : Save map json file)
Procedure MainFormClose()
  End
EndProcedure
Si vous souhaitez sauvegarder le contexte, sauver la map au format JSON avant de fermer la fenêtre sans oublier de recharger cette map au lancement du code.

Re: [Window] Launcher d'applications & co

Publié : sam. 28/nov./2015 23:14
par Patrick88
marche impec, w10 x64
fonctionne aussi avec les pdf...
les icones sont plus petites que celles placées sur le bureau ?

un excellent début pour refaire le programme "Fences" qui ne fonctionne pas avec windows 10...
à gauche = bureau standard en "bordel", à droite avec le logiciel "Fences"...
Image

pat

Re: [Window] Launcher d'applications & co

Publié : sam. 28/nov./2015 23:18
par Ar-S
@Falsam : Merci

@Patrick88 : Heu j'avais acheté Fence à ma mère au passage à W10, la dernière mouture marchait très bien.

Re: [Window] Launcher d'applications & co

Publié : sam. 28/nov./2015 23:24
par falsam
@Patrick : Merci pour ce test.
Patrick88 a écrit :n excellent début pour refaire le programme "Fences"
Allez hop à ton clavier et n'hésite pas à poster l'avancement de tes travaux :wink:

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 14:59
par falsam
Amélioration du code.

- Il est possible maintenant de glisser des liens internet depuis si vous avez un navigateur supportant cette action comme Chrome, FireFox, Opera.

- L'application est redimensionnable en hauteur.

- L'application est toujours devant les autres applications.

Le premier message est mis à jour.

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 15:55
par Patrick88
je viens de te trouver quelques bug... :mrgreen:

on ne peut glisser/déposer que des raccourcis, des documents (pdf,txt...), dossier, zip

mais on peut pas y déposer la corbeille, le panneau de configuration, réseau, et l'icone système ???

Pat

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 16:27
par falsam
Patrick88 a écrit :je viens de te trouver quelques bug...
Rhaaaa le chacal ^^

Non ce ne sont pas des bugs. Le Drag & Drop (sauf erreur) ne permet pas de glisser la poubelle ou tout autres élements system de Windows.

C'est à toi je pense d'ouvrir une boite de dialogue permettant d'initialiser des commandes system
comme explorer.exe shell:RecycleBinFolderce qui donnera en PureBasic

Code : Tout sélectionner

RunProgram("explorer.exe", "shell:RecycleBinFolder","")
Pour le panneau de configuration tu as

Code : Tout sélectionner

RunProgram("control")

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 16:42
par Marc56
falsam a écrit : - Il est possible maintenant de glisser des liens internet depuis si vous avez un navigateur supportant cette action comme Chrome, FireFox, Opera.
Oh, futé ça! (par contre ça ne créé pas d'icône, mais ça peut s'arranger avec une icône standard)

Puis-je utiliser cette idée ?
:wink:

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 16:57
par falsam
Marc56 a écrit :Puis-je utiliser cette idée ?
Oui tu peux :wink:

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 17:03
par Marc56
falsam a écrit :
Marc56 a écrit :Puis-je utiliser cette idée ?
Oui tu peux :wink:
Merci 8) (tu auras ton pseudo au générique et un énorme pourcentage du bénéfice ... (c'est un freeware donc je me mouille pas trop))
Je suis en train de mettre au point (la séparation texte ou file est facile).
Il ne me reste plus qu'à mettre une icône par défaut pour ce type de lancement.
Je pense mettre l'icône du navigateur par défaut ou celle d'une page html
Idéalement ce serait celle du favicon de la page (si elle existe) ou celle du qui a lancé le lien ou celui par défaut.
(mais la ça devient tordu :? )

:wink:

Edit: 17:33 Ça marche, maintenant on peut faire le d&d d'une page web vers le desk. L'icône par défaut est un globe.
(dispo dans la prochaine version)

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 17:35
par Patrick88
falsam a écrit : C'est à toi je pense d'ouvrir une boite de dialogue permettant d'initialiser des commandes system
comme explorer.exe shell:RecycleBinFolderce qui donnera en PureBasic

Code : Tout sélectionner

RunProgram("explorer.exe", "shell:RecycleBinFolder","")
Pour le panneau de configuration tu as

Code : Tout sélectionner

RunProgram("control")
[début mode="KCC Suppliant"]
Et tu ne pourrais pas créer le raccourci lorsque l'on drag'n drop le panneau de config ou la poubelle ?
[fin mode="KCC Suppliant"]

:mrgreen:

pat

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 17:38
par Marc56
Patrick88 a écrit : [début mode="KCC Suppliant"]
Et tu ne pourrais pas créer le raccourci lorsque l'on drag'n drop le panneau de config ou la poubelle ?
[fin mode="KCC Suppliant"]

:mrgreen:

pat
J'ai essayé, :mrgreen:
ça ne fonctionne pas, comme avait précisé falsam.
Par contre tu me donne une idée: une icône intégrée au desk et qui fera office de poubelle (pour quand celle de windows n'est pas affichée ou masquée)
idées, idées, idées, idées, idées, 8) :P

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 17:48
par falsam
@Patrick: Le souci est que l'événement n'est pas détecter avec Purebasic dans ce cas là. Tu as un pictogramme interdit qui apparaît.

@Marc: ben oui l'idée est là : une icône intégrée au desk associé à une commande Shell.

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 18:14
par Marc56
falsam a écrit :@Marc: ben oui l'idée est là : une icône intégrée au desk associé à une commande Shell.
Ma ToDo list vient encore de prendre une ligne :)

Re: [Window] Launcher d'applications & co

Publié : dim. 29/nov./2015 18:58
par falsam
@Marc: L'idée du favicon est pas mal non plus est je pense pas très compliquer à mettre en oeuvre si tu extraits le nom de domaine. A suivre ......

http://www.google.com/s2/favicons?domain=purebasic.com Image
http://www.google.com/s2/favicons?domain=youtube.com Image

Et quand il n'y a pas alors effectivement le globe ou bien plus compliqué tu cherches le navigateur par défaut et tu affiches son icone.