[Window] Launcher d'applications & co

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[Window] Launcher d'applications & co

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [Window] Launcher d'applications & co

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Window] Launcher d'applications & co

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [Window] Launcher d'applications & co

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message 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")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: [Window] Launcher d'applications & co

Message 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:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message par falsam »

Marc56 a écrit :Puis-je utiliser cette idée ?
Oui tu peux :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: [Window] Launcher d'applications & co

Message 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)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: [Window] Launcher d'applications & co

Message 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
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: [Window] Launcher d'applications & co

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: [Window] Launcher d'applications & co

Message 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 :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Window] Launcher d'applications & co

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre