Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [DELPHI] TShellListView e ordinamento in base a una colonna

    buongiorno,
    non riesco a 'ordinare' le colonne di una ShellListView con delphi
    in modo da visualizzare l'elenco di file in ordine di data modifica
    Nelle propriet� del componente ho settato a VsReport il ViewStyle
    e a true il Sorted.
    Creo l'evento 'onColumnsClick' nel quale cerco di usare
    codice:
    var ColumnToSort: Integer;
    procedureTForm1.ListView1ColumnClick(Sender:TObject;Column:TListColumn);
    begin
      ColumnToSort := Column.Index;
      (Sender as TShellListView).AlphaSort; 
    end;
    anche se credo che questo codice si riferisca al componente TListView
    ma non sortisce effetto...

    ...dove sbaglio ??

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da PdhMonty Visualizza il messaggio
    non riesco a 'ordinare' le colonne di una ShellListView con delphi
    in modo da visualizzare l'elenco di file in ordine di data modifica
    [...]
    credo che questo codice si riferisca al componente TListView
    ma non sortisce effetto...
    Nel tuo codice non v'è traccia del riferimento a una specifica colonna sulla quale fare l'ordinamento.

    Fondamentalmente, stai salvando l'indice della colonna da usare per l'ordinamento in una variabile, poi richiami un AlphaSort sul controllo, ma da nessuna parte si fa riferimento a quell'indice di colonna per ordinare a tutti gli effetti.

    Se l'esempio lo hai preso da questo thread su SO, vedi che ci sono altre considerazioni nella pagina, incluso un evento di "compare" tra elementi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Quote Originariamente inviata da alka Visualizza il messaggio
    Nel tuo codice non v'è traccia del riferimento a una specifica colonna sulla quale fare l'ordinamento.

    Fondamentalmente, stai salvando l'indice della colonna da usare per l'ordinamento in una variabile, poi richiami un AlphaSort sul controllo, ma da nessuna parte si fa riferimento a quell'indice di colonna per ordinare a tutti gli effetti.

    Se l'esempio lo hai preso da questo thread su SO, vedi che ci sono altre considerazioni nella pagina, incluso un evento di "compare" tra elementi.

    Ciao!
    Vero.. ho visto anche quell'articolo. il fatto è che nel componente TShellListView non esiste l'evento 'OnCompare', in che modo viene richiamata la procedura ?

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da PdhMonty Visualizza il messaggio
    Vero.. ho visto anche quell'articolo. il fatto è che nel componente TShellListView non esiste l'evento 'OnCompare', in che modo viene richiamata la procedura ?
    Io vedo il l'evento documentato in questa pagina, assieme a SortType e a SortColumn.

    E' vero che si parla della versione Lazarus, ma il controllo - se non ricordo male - dovrebbe essere open source ed essere fondamentalmente sempre lo stesso.

    In caso contrario, indica la versione di Delphi che usi (se il controllo è incorporato) o dove hai scaricato questa versione della ListView che stai utilizzando.

    Per approfondimenti, dovrei guardare meglio la mia copia di Delphi, anche se al momento non ho la possibilità di farlo perché impegnato in altre attività, purtroppo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Quote Originariamente inviata da alka Visualizza il messaggio
    Io vedo il l'evento documentato in questa pagina, assieme a SortType e a SortColumn.

    E' vero che si parla della versione Lazarus, ma il controllo - se non ricordo male - dovrebbe essere open source ed essere fondamentalmente sempre lo stesso.

    In caso contrario, indica la versione di Delphi che usi (se il controllo è incorporato) o dove hai scaricato questa versione della ListView che stai utilizzando.

    Per approfondimenti, dovrei guardare meglio la mia copia di Delphi, anche se al momento non ho la possibilità di farlo perché impegnato in altre attività, purtroppo.
    L'oggetto TShellListView è caricato come packages esterno, la ver delphi è la 11 e non lo contiene nella sua libreria, come non credo lo abbiano anche le altre versioni..
    ricordo che lo caricavo come packages anche con D7

  6. #6
    Quote Originariamente inviata da PdhMonty Visualizza il messaggio
    L'oggetto TShellListView � caricato come packages esterno, la ver delphi � la 11 e non lo contiene nella sua libreria, come non credo lo abbiano anche le altre versioni..
    ricordo che lo caricavo come packages anche con D7
    Ovviamente � probabile che il mio ShellCtrls sia obsoleto !!
    Accetto volentieri suggerimenti sul atri VCL che mi permettano di navigare dentro il PC
    grazie

  7. #7

    in conclusione

    Ho provato anche questo metodo:
    per modificare il ShellCtrls.pas:
    codice:
    TCustomShellListView = class(TCustomListView, IShellCommandVerb)
    > ...
    > public
    > ...
    >   property FolderList: TList read FFolders;  << ADD THIS
    > ...
    > end;
    ho dovuto ovviamente sganciare il componente Shellcontrols modificarlo e poi ricaricarlo sul RAD, ma nonostante ciò continua a non funzionare, probabilmente quel codice è strutturato per il componente TlistView che possiede l'evento ‘OnCompare’ senza il quale ShellListView non riesce a gestire la routine
    codice:
    ShellListView1.FolderList.Sort(ShellCompare);
    Inoltre il pacchetto ShellControls utilizzato che si reperisce facilmente su GitHub contiene una DEMO molto esaustiva sul funzionamento della VCL che infatti non considera assolutamente l'evento ‘OnColumnClick’ ma una specie di ‘SORT’ che richiama da una ActionList
    codice:
    procedure TMainForm.actnSortedUpdate(Sender: TObject);
    begin
      actnSorted.Checked := ShellListView.Sorted;
    end;
    che allinea i file per tipo e basta.
    In conclusione credo (e spero di essere smentito…) che non ci sia modo di ottenere l'ordinamento delle colonne su TshellListView.

  8. #8
    Utente bannato
    Registrato dal
    Apr 2024
    Messaggi
    4
    .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.