* * * *

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 25, 2024, 03:04:28 am

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

67 Visitatori, 0 Utenti

Autore Topic: RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts  (Letto 3029 volte)

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Mettendo ColumnClickSorts TRUE è possibile ordinare le righe della stringgrid
agendo sull'intestazione della colonna.Però non riesco a capire perchè l'ordinamento
crescente (decerescente) è di questo tipo:
ad esempio partendo da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Facendo un sorting ottengo
1
10
11
12
13
14
15
2
3
4
5
6
7
8
9


« Ultima modifica: Maggio 24, 2023, 01:42:23 pm da alexarmato66 »

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #1 il: Maggio 24, 2023, 01:43:13 pm »
Ho parzialmente risolto il problema modificando la seguente funzione:
Codice: [Seleziona]
function TCustomStringGrid.DoCompareCells(Acol, ARow, Bcol, BRow: Integer): Integer;
begin
  if Assigned(OnCompareCells) then
    Result:=inherited DoCompareCells(Acol, ARow, Bcol, BRow)
  else begin
   // Result:=UTF8CompareLatinTextFast(Cells[ACol,ARow], Cells[BCol,BRow]);

    //--------------------------    Modificato x ordinare stringgrid
   try
     result := CompareValue(StrTofloat(Cells[ACol,ARow]), StrTofloat(Cells[BCol,BRow]));
   Except
     result := AnsiCompareText(Cells[ACol,ARow], Cells[BCol,BRow]);
   end;

    //-------------------------------------------
    if SortOrder=soDescending then
      result:=-result;
  end;
end;                             

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #2 il: Maggio 24, 2023, 01:51:40 pm »
Perchè il "bianco" (chr32) "pesa"

Se metti dei bianchi e allinei numeri a destra l' ordinamento funziona

Ci sono le funzioni "pad"  che si possono usare : https://www.freepascal.org/docs-html/rtl/strutils/padleft.html

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #3 il: Maggio 24, 2023, 02:58:57 pm »
Però non riesco a capire perchè l'ordinamento crescente (decerescente) è di questo tipo:

Perché lui fa un ordinamento di stringhe, non lo sa che quelli sono numeri, e quello che fa, dal suo punto di vista è corretto !
Nella tua "DoCompareCells" dovresti fare questo per ognuna delle 2 celle su cui fa il confronto:
- mettere il valore della cella in una variabile di tipo stringa
- fare la trim di questa variabile
- convertire la variabile in una numerica, ed usare questa numerica per fare il confronto

naturalmente lo puoi ottimizzare facendo tutto in un colpo solo, ho preferito scrivere i singoli passaggi per provare a spiegarmi meglio !
« Ultima modifica: Maggio 24, 2023, 03:03:17 pm da bonmario »

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #4 il: Maggio 24, 2023, 03:07:48 pm »
In realtà nella stringgrid ho i numeri centrati nella cella.

bonmario

  • Hero Member
  • *****
  • Post: 1360
  • Karma: +11/-1
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #5 il: Maggio 24, 2023, 03:11:39 pm »
lo sai tu che sono numeri, ma il compilatore no !!!
P.S. Li hai centrati mettendo degli spazi prima e/o dopo?

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #6 il: Maggio 24, 2023, 03:34:21 pm »
in PrepareCanvas  :

Codice: [Seleziona]
ts.Alignment := taCenter;

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #7 il: Maggio 24, 2023, 03:36:18 pm »
ho fatto alcune verifiche e sembrerebbe che la funzione di cui sopra funzioni.

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #8 il: Maggio 25, 2023, 08:09:41 pm »
orpo ....ho ricompilato il programma su un altro computer ed il problema iniziale si è riconfermato.
Avevate ragione ma non capisco perchè funzioni sul computer di partenza.Indagherò..... :(

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #9 il: Maggio 26, 2023, 08:04:38 pm »
Scusate non avero ricopiato il file Grids.pas. Funziona perfettamente con
la seguente modifica alla funzione TCustomStringGrid.DoCompareCells:
Codice: [Seleziona]
function TCustomStringGrid.DoCompareCells(Acol, ARow, Bcol, BRow: Integer): Integer;
begin
  if Assigned(OnCompareCells) then
    Result:=inherited DoCompareCells(Acol, ARow, Bcol, BRow)
  else begin
   // Result:=UTF8CompareLatinTextFast(Cells[ACol,ARow], Cells[BCol,BRow]);

    //--------------------------    Modificato x ordinare stringgrid
   try
     result := CompareValue(StrTofloat(Cells[ACol,ARow]), StrTofloat(Cells[BCol,BRow]));
   Except
     result := AnsiCompareText(Cells[ACol,ARow], Cells[BCol,BRow]);
   end;

    //-------------------------------------------
    if SortOrder=soDescending then
      result:=-result;
  end;
end;                   

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #10 il: Maggio 26, 2023, 08:39:49 pm »
"CompareValue("

 ::)

https://www.freepascal.org/docs-html/rtl/math/comparevalue.html

"Description

CompareValue compares 2 integer or floating point values A and B and returns one of the following values:

-1
    if A<B
0
    if A=B
1
    if A>B "


 :)

in pratica l' "if ternario" del buon vecchio fortran


A proposito di fortran, magari questo comando puo' tornare utile nel maneggiare stringhe e numeri *

https://www.freepascal.org/docs-html/rtl/sysutils/trystrtofloat.html

Io ad ogni modo preferisco il buon vecchio parser:

https://wiki.freepascal.org/How_To_Use_TFPExpressionParser

Morale: ci sono tanti modi diversi di affrontare lo stesso problema .


*
come nel fortran è possibile usare l' input formattato per leggere i dati da un file di testo o da un memo

https://www.freepascal.org/docs-html/rtl/sysutils/sscanf.html

alias: siamo nel campo della validazione del data entry; per l' input da tasiera c'è il "mask edit ":

https://wiki.freepascal.org/TMaskEdit

L' unico problema è "tararlo" , ossia collaudarlo per le reali esigenze dell' utenza finale; magari si potrebbe fare un 3ad ad hoc sulla validazione del data entry .
« Ultima modifica: Maggio 26, 2023, 09:10:33 pm da Avogadro »

alexarmato66

  • Full Member
  • ***
  • Post: 147
  • Karma: +1/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #11 il: Maggio 27, 2023, 04:52:03 pm »
Grazie Avogadro , mi toccherà studiare un botto!! :)

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #12 il: Maggio 27, 2023, 10:39:36 pm »
Sono solo modi per cercare di semplificarsi la vita nel data entry.

Preferisco creare dei file testo da dare poi "in pasto"  ai sw, piuttosto che stare lì a riempire caselle .

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2389
  • Karma: +10/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #13 il: Maggio 29, 2023, 11:10:41 am »
Viva la pigrizia creativa ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Avogadro

  • Full Member
  • ***
  • Post: 217
  • Karma: +0/-0
Re:RISOLTO_ORDINARE UNA STRINGGRID MEDIANTE LA PROPRIETA' ColumnClickSorts
« Risposta #14 il: Maggio 29, 2023, 02:31:05 pm »
Nessuna pigirizia per creativa che essa sia, sto venendo da una visita medica -una tortura cinese - ed è venuto fuori che l'aver passato anni ed anni a fare data entry e a cliccare su caselle e message box su software pensati  a tutto eccetto che all' ergonomia mi ha causato dei problemi purtroppo irreversibili .

Anche queste sono cose da tenere in conto quando si progetta un software con un data entry massiccio.

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19189
  • Topic in totale: 2289
  • Online Today: 50
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 67
Total: 67

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.