* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Novembre 21, 2024, 07:26:56 pm

Inserisci il nome utente, la password e la durata della sessione.

88 Visitatori, 0 Utenti

Autore Topic: [OT] Windows 11 e barra di avvio veloce  (Letto 15146 volte)

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #15 il: Febbraio 10, 2023, 11:04:33 pm »
Domanda veloce... curiosità ;)

ma le icone sui pulsanti che si vedono nello screeshot che hai postato, le hai caricate da file immagini (png, bmp...)
o le hai prelevate direttamente dall'eseguibile ? sarei curioso di capire come hai fatto.

M
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #16 il: Febbraio 11, 2023, 07:30:00 am »
Nella versione Linux, le carico da immagine (bmp, ico, jpg, ecc).
Nella versione Windows direttamente da eseguibile/link

Il codice che uso è questo:
Codice: [Seleziona]
function  EstraiIcona(const NomeFileExe: String; WrkIcona: TIcon; WrkDimIco:Integer): Boolean;
{$IFDEF MSWINDOWS}
  var SysStr: Widestring;
      FileInfo: SHFILEINFOw;
      HandleImageList:HIMAGELIST;
      IdxImg:Integer;
{$ENDIF}
begin
  Result:=False;

  {$IFDEF MSWINDOWS}
    HandleImageList:=ImageList_Create(WrkDimIco, WrkDimIco, ILC_COLOR32, 0, 1);
    try
      SysStr:=UTF8ToUTF16(NomeFileExe);
      IdxImg:=SHGetFileInfoW(PWideChar(SysStr), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
      if (IdxImg <> 0) then begin
        WrkIcona.Handle:=FileInfo.hIcon;

        //Carico l'icona in una struttura di appoggio che fa sì che non venga perso
        //il bit relativo alla trasparenza (a differenza di quanto succede con "EstraiIconaDaExe")
        IdxImg:=ImageList_AddIcon(HandleImageList, WrkIcona.Handle);
        if (IdxImg <> -1) then begin
          IdxImg:=ImageList_ReplaceIcon(HandleImageList, IdxImg, WrkIcona.Handle);
          if (IdxImg <> -1) then begin
            //Ora posso assegnare l'icona letta all'output della funzione, e comunicare
            //al chiamante che tutto è ok
            WrkIcona.Handle:=ImageList_GetIcon(HandleImageList, 0, ILD_TRANSPARENT + ILD_MASK + ILD_IMAGE);
            Result:=True;
          end;
        end;
      end;
    finally
      ImageList_Destroy(HandleImageList);
    end;
  {$ENDIF}
end;

Ora sono di fretta, e non riesco a verificare se è compilabile, o se gli serve qualcosa che prendo da altre unit.
provalo, ed eventualmente fammi sapere se e cosa manca

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #17 il: Febbraio 11, 2023, 11:57:19 am »
Codice: [Seleziona]
Uses Windows, ShellApi;
var   IconIndex: word;
var   IconHandle: HIcon;
        IconIndex := 0;
        IconHandle := ExtractAssociatedIcon(HInstance, nomedelifile, IconIndex);

Vado a memoria questo ti estrare l'Handle dell'icona "abbinata" di un qualsiasi file in Windows. Funziona su qualsiasi file, non solo gli eseguibili.

L'handle poi puoi assegnarlo oppure puoi salvarti l'immagine.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #18 il: Febbraio 11, 2023, 02:53:54 pm »
@DragoRosso,

ho provato il codice che hai postato ma non riesco a capire una cosa, l'ultimo parametro immagino sia l'indice dell'icona all'interno del file (exe o dll), l'ho settato a 0 ma in compilazione mi restituisce questo errore:

main.pas(196,99) Error: Incompatible type for arg no. 3: Got "Word", expected "LPWORD"

cosa non gli "piace" nella dichiarazione ?

Codice: [Seleziona]
procedure TTrayLauncher.ReadSettings;
var   IconIndex: word;
var   IconHandle: HIcon;   
...
...
..
          IconIndex := 0;
          IconHandle := ExtractAssociatedIcon(HInstance, appSpec[countTotalApp].appName, IconIndex);   


M
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #19 il: Febbraio 11, 2023, 04:57:54 pm »
In effetti è errata la chiamata ..... (qui il riferimento Microsoft): https://learn.microsoft.com/it-it/windows/win32/api/shellapi/nf-shellapi-extractassociatediconw

La chiamata corretta è:

Codice: [Seleziona]
IconHandle := ExtractAssociatedIcon(HInstance, appSpec[countTotalApp].appName, @IconIndex);

IconIndex (c'è la chioccciola in chiamata) e il nomefile vengono variati se il file è un eseguibile o una dll: nel nomefile la funzione scrive la path completa con il nomedelfile, e in IconIndex viene caricato l'indice dell'icona presente nel file eseguibile è che è associata a file stesso (non è detto sia la prima).

Per tutti gli altri file (ad esempio un collegamento a una pagina web) viene ritornato solo l'Handle all'icona abbinata al collegamento (potrebbe essere l'icona del browser standard oppure l'icona identificativa del sito web).

Occhio che la stringa nomedelfile potrebbe essere variata, quindi è meglio usare un buffer per passare il nomedelfile ... il chiamato sicuramente non và a testare l'allocazione della stringa e si rischia di avere LEAK.

Ti posto un esempio concreto ....
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #20 il: Febbraio 11, 2023, 07:01:25 pm »
Posto un esempio con cui tra l'altro si abilita il DRAG&DROP, può essere utile per quello che state facendo ....

Fate partire il programma, trascinate una qualsiasi cosa (link, file) e oltre a visualizzare il nome completo cambierà l'icona dell'applicazione con quella abbinata al file trascinato.....

Ciao

P.S.: se trascinate più file, l'icona della vs. applicazione apparirà come abbinata all'ultimo dei file trascinati.
« Ultima modifica: Febbraio 11, 2023, 07:03:03 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #21 il: Febbraio 11, 2023, 08:12:29 pm »
Interessante, adesso lo guardo ;)

condivido lo stadio attuale del cosidetto Launcher, in pratica è iniziato un po come un gioco... tipo "vediamo che si può fare.."

ma tutto sommato penso che lo utilizzerò, eliminando così le cartelle con i link che avevo impostato per ovviare alle limitazioni della barra di WIndows.

Al momento leggo da un file di testo (il solito .ini) i dati necessari:
nome dell'applicazione,
percorso completo,
directory di esecuzione,
al momento anche l'icona, poi spero di riuscire a capire come prelevare quella dell'exe

carico il tutto in un record che gestisco con un array, non mi sono posto il problema di una struttura tipo List, ragionando sul fatto che: quanti programmi potrò mai mettere in questa struttura ? 20..30 ..40 !

Poi mentre ci lavoravo, dato che sono leggeremnte maniaco dell'ordine, ho pensato di dotare la barra anche di un PageControl, in modo da organizzare i programmi secondo la logica di TabSheet, chiaramente non è obbligatorio in quanto cartelle e programmi vengono letti da un file di inizializzazione, per cui se si vuole si divide, altrimenti tutto insieme, va da sè che l'ordine con cui appariranno, sarà quello definito nel file.

Sto anche lavorando su un semplice form di settaggio: posizione a schermo, dimensione iniziale...  si potrebbe anche pensare di utilizzare il Drag&Drop fornito da DragoRosso e poi costruire il file (che è quello che suggeriva Bonamario !).

allego qualche esempio, da considerare che ci lavoro da ieri, quindi siamo allo stato iniziale, poi andrà affinato, non fate caso ai programmi che vedete in lista, perchè per avere elementi sono andato giù di copia e incolla
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #22 il: Febbraio 11, 2023, 08:49:35 pm »
Complimenti, veramente bello !

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #23 il: Febbraio 11, 2023, 09:51:09 pm »
Grazie del complimento !!!

il popup è ridimensionabile e a scorrimento se i pulsanti sono maggiori dello spazio mostrato, direi che ce ne stanno fin che mai
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #24 il: Febbraio 11, 2023, 11:40:10 pm »
Anteprima video funzionalità base drag and drop, con simulazione quick bar.

SI VEDE SOLO CON VLC, no mediaplayer.

Poi posto il codice ...
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #25 il: Febbraio 12, 2023, 09:43:09 am »
Direi di un'altro livello, veramente una bella soluzione !!

io invece stò ancora cozzando con il problema di attribuire l'icona dell'applicazione al punsante di lancio...  :-\
ho provato l'esempio di Dragorosso e anche un'altro trovato in rete... ma non vanno, ho errori di attribuzione del oggetto ICON al pulsante...
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #26 il: Febbraio 12, 2023, 10:14:31 am »
Tra poco posto il sorgente ... quick bar già funzionante in Delphi con drag&drop di riordino, sia in fase di inserimento che dopo.

Purtroppo Lazarus ha qualche problemino con la messagistica di Windows e quindi come ho fatto per l'altro esempio devo lavorare un pò per renderlo funzionante sotto FPC.

Ciao

P.S.: link al video (tasto destro del mouse e salva ....) https://cloud.dyn-o-saur.com/Video_20230212101731844.avi SEMPRE DA APRIRE CON VLC.
« Ultima modifica: Febbraio 12, 2023, 10:24:15 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #27 il: Febbraio 12, 2023, 01:12:18 pm »
ho provato l'esempio di Dragorosso e anche un'altro trovato in rete... ma non vanno, ho errori di attribuzione del oggetto ICON al pulsante...

Hai provato quello che ho postato io ieri?
A me funziona ...

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #28 il: Febbraio 12, 2023, 02:28:57 pm »
Posto il progetto completo.

Queste le note (sono anche dentro il progetto).

Citazione
Uso:
      - Fate il drag and drop di questo eseguibile sulla barra delle applicazioni.
                - Da questo momento potete cliccare sull'icona per fare apparire / scomparire la "barra".
      - Trascinate nella "barra" link, applicazioni, documenti o altro.
      - Tasto destro su un zona bianca per attivare / disattivare l'ordinamento.

Da fare:
         - Eliminare icone dalla barra;
         - Salvare su file (o registro di Windows)
         - Caricare da file (o registro di Windows) all'avvio
         - Trovare il drag point per il drag and drop fatto da Explorer

Problemi noti:

         - A differenza di Delphi dove tutte le icone di qualsiasi tipo vengono visualizzate,
           in Lazarus non tutte le icone vengono visualizzate (specialmente icone relative ad alcuni LINK)

Può essere uno spunto per fare qualcosa di più completo.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

giacomarko

  • Full Member
  • ***
  • Post: 107
  • Karma: +6/-0
Re:[OT] Windows 11 e barra di avvio veloce
« Risposta #29 il: Febbraio 12, 2023, 04:21:12 pm »
ho provato l'esempio di Dragorosso e anche un'altro trovato in rete... ma non vanno, ho errori di attribuzione del oggetto ICON al pulsante...

Hai provato quello che ho postato io ieri?
A me funziona ...

Ciao, Mario

si ma non riesco ad assegnare l'icona dell'eseguibile al BitBtn che lancerà l'applicazione, può essere che tu nel programma originario la assegnavi ad un TImage e non ad un BitBtn ?
Ad ogni modo ora riprova da capo.

grazie
SO: W11
Release Lazarus: 3.0 del 2023.12.17 win32/win64
Versione FPC: 3.2.2
DB: MySQL 5.0, MSAccess

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 117
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 88
Total: 88

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.