Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Ottobre 09, 2024, 01:48:26 pm

Titolo: Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 09, 2024, 01:48:26 pm
Ciao,
ho un progetto con una SynEdit, in cui metto del testo, che mi arriva da un programma esterno.
Nella SynEdit vado a colorare alcune parole chiave con colori differenti.

Siccome ultimamente arrivano alcune "righe lunghe", mi hanno fatto notare che la cosa crea problemi, e mi hanno chiesto il "Ritorno a capo automatico", in pratica quello che nelle TMemo fa l'opzione "WordWrap".
Il problema è che la SynEdit non ha quell'opzione !!!

Ora, stavo quindi valutando se può o meno valere la pena vedere se riesco a fare io qualcosa
Per caso conoscete qualche componente simile, che abbia l'opzione WordWrap, e permetta di colorare a runtime lo sfondo di alcune parole?

P.S. La richiesta completa, sarebbe quella di avere un checkbox che permetta di abilitare o disabilitare il "Ritorno a capo automatico" quando vuole l'utente

Grazie, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: tito_livio - Ottobre 09, 2024, 06:55:02 pm
Ciao,
potresti mettere, il testo che ti arriva, prima in una tmemo, invisibile, con la stessa larghezza e lo stesso font, e poi riga per riga, con un loop, riversi nella synedit.
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 10, 2024, 08:14:31 am
Ciao,
potresti mettere, il testo che ti arriva, prima in una tmemo, invisibile, con la stessa larghezza e lo stesso font, e poi riga per riga, con un loop, riversi nella synedit.

Grazie per il consiglio, farò qualche prova.

Ciao, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 10, 2024, 07:04:04 pm
Risposta probabilmente stupida ... perchè non usare una TRichedit ?

Che peculiarità ha SynEdit che sono essenziali per l'uso con il cliente in questione ?

N.B.: non ho mai usato SynEdit ...

Ciao
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 11, 2024, 07:32:52 am
Risposta probabilmente stupida ... perchè non usare una TRichedit ?

Che peculiarità ha SynEdit che sono essenziali per l'uso con il cliente in questione ?

N.B.: non ho mai usato SynEdit ...

Ciao

C'è tutto uno studio dietro, durato anni ... in pratica avevo trovato un esempio semplice, che spiegava come colorare singole parole, proprio con SynEdit  ;D ;D ;D

Scherzi a parte, di solito cerco di usare componenti presenti già nell'installazione di Lazarus, per evitare problemi che ho avuto in passato con componenti esterni poi dismessi.
TRichedit fa parte di questo https://wiki.freepascal.org/lzRichEdit giusto?

Nei prossimi giorni dovrei avere del tempo, e faccio qualche prova con TRichEdit ... grazie !!!

Ciao, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: Mimmo - Ottobre 11, 2024, 08:31:15 am
Ciao, c'è un componente che non ho mai usato ma che penso possa avere tutto quello che ti necessita: https://github.com/Alexey-T/ATSynEdit (https://github.com/Alexey-T/ATSynEdit).
Trovi un po' di documentazione qui https://wiki.freepascal.org/ATSynEdit (https://wiki.freepascal.org/ATSynEdit).
L'autore è quello di CudaText che è costruito proprio su questo componente.
Io non l'ho utilizzato ma uso regolarmente un altro suo progetto: ATFlatControls. Tutti i progetti sono attivamente mantenuti e l'autore ci dedica un sacco di tempo.
Nell'elenco delle features c'è il word-wrap ed è possibile costruire un Adapter per fare l'highlight di qualsiasi sintassi.
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 11, 2024, 03:08:01 pm
Ciao, c'è un componente che non ho mai usato ma che penso possa avere tutto quello che ti necessita: https://github.com/Alexey-T/ATSynEdit (https://github.com/Alexey-T/ATSynEdit).
Trovi un po' di documentazione qui https://wiki.freepascal.org/ATSynEdit (https://wiki.freepascal.org/ATSynEdit).

Questo sarebbe interessante, ma oltre ad essere già lui un componente esterno, in fase di installazione ne richiede altri 2 di cui non ricordo il nome.
Se non trovo altro con meno dipendenze, lo rivaluto

Grazie, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 11, 2024, 04:41:29 pm
Risposta probabilmente stupida ... perchè non usare una TRichedit ?

Che peculiarità ha SynEdit che sono essenziali per l'uso con il cliente in questione ?

N.B.: non ho mai usato SynEdit ...

Ciao

Non so se è quello che intendevi tu, ma cercando "rich" tra gli oggetti a disposizione, ho trovato la TRichMemo https://wiki.freepascal.org/RichMemo

Sembra che abbia tutto quello che mi serve:
- possibilità di abilitare e disabilitare a runtime il WordWrap
- colorare in maniera diversa differenti pezzi

Grazie, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 11, 2024, 07:18:03 pm
Non so se è quello che intendevi tu, ma cercando "rich" tra gli oggetti a disposizione, ho trovato la TRichMemo https://wiki.freepascal.org/RichMemo

Sembra che abbia tutto quello che mi serve:
- possibilità di abilitare e disabilitare a runtime il WordWrap
- colorare in maniera diversa differenti pezzi

Grazie, Mario
Si, quello. In Delphi si chiama TRichedit, ma è quel controllo.

Lieto di esserti stato utile.
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 12, 2024, 07:17:29 am
Si, quello. In Delphi si chiama TRichedit, ma è quel controllo.

Lieto di esserti stato utile.

Ok, grazie !!

Tra l'altro, ho dato un occhio veloce, e la "conversione" dovrebbe essere abbastanza veloce.
L'unico dubbio che mi rimane al momento, e che non mi ricordavo nemmeno, è che nel progetto avevo anche 2 bottoni con cui fare "Trova successivo" e "Trova precedente", devo ancora verificare come fare questa cosa sulla TRichMemo, per il resto sembra avere tutto quello che mi serve

Ciao, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 12, 2024, 10:18:06 am
Per il trova precedente / successivo, io farei la ricerca in tutto il documento, memorizzandomi tutte  le coordinate delle testo trovato (riga / colonna) e iterando poi tra le posizioni. Se il documento viene modificato per qualsiasi motivo, allora rifai il processo di ricerca.

N.B.: per la presentazione della ricerca, fai in modo che il testo si ponga sempre verso il centro più o meno dello pagina visualizzata. In molti (troppi) documenti quando fai la ricerca il documento viene posizionato con il testo in prima riga visualizzata a schermo ... e la maggior parte dei casi non si vede o tocca muovere il documento perchè parzialmente nascosto (errore di calcolo per i font usati / contenuti multimediali o altro)....

Ciao
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 12, 2024, 02:46:11 pm
Grazie, mi hai anche ricordato che nel farlo, devo cercare di sistemare un'altra cosa: spesso, con la ricerca attuale della synedit, quello che trova viene messo proprio all'inizio o proprio alla fine della parte visibile, non facendo così capire il "contesto". Dovrò cercare di fare qualcosa anche per quello

Ciao, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 17, 2024, 11:33:48 am
Ciao,
avrei un problemino ....

Vorrei evitare di stravolgere la vecchia gestione, che lavorava su ogni singola riga della TSynEdit, e fare la stessa cosa con la TRichMemo.
ll problema, è che l'istruzione che permette di "evidenziare" le parole che mi interessano, è questa:

Codice: [Seleziona]
RichMemo1.SetTextAttributes(WrkStart,WrkLength, FontDialog1.Font);

Il primo parametro indica da dove deve iniziare a variare il carattere, il secondi, per quanti caratteri.

Il problema è che il numero del primo parametro, è relativo all'intera RichEdit.

Provo a spiegarmi ...
Supponiamo che la RichEdit contenga 3 righe:
- la prima con AAA
- la seconda con BBB
- la terza con CCC

Se io volessi evidenziare "CCC", mi servirebbe sapere quale numero mettere. Ho provato a contare i caratteri delle righe precedenti con UTF8Length, ma non funziona correttamente ...

Qualche consiglio?


Grazie, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 17, 2024, 12:11:22 pm
Da quello che ho visto, poi devo verificare meglio in Lazarus nel primo pomeriggio, la selezione del testo è legata come dicevi tu alla posizione del carattere all'interno della RichMemo e alla lunghezza della selezione (il tutto deriva dalla gestione di Windows ...).

Come trasformare questo in "linee" è un'ottima domanda, anche perchè di fatto se vai a modificare il font della selezione potrebbe essere che la stessa selezione "cambi" in corsa di posizione ... non nei termini assoluti ovviamente ma in termini di linee si, ad esempio se hai il "wordwrap" attivo o comunque se sei al bordo visibile del controllo.

Uhmm un disguido non da poco .... forse, ma dico forse, un pensiero alla modifica del tuo algoritmo di lavoro per riga lo farei ...
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 17, 2024, 12:55:34 pm
Ok, grazie per la disponibilità.

Dovrò riverificare la cosa un altro giorno, quando avrò del tempo, ma credo di aver capito il problema ...

Nel file che mi arriva, non sempre, ma comunque può succedere, ci sono righe molto lunghe.
Nel caso particolare che ho visto prima, c'era una riga di 15.000 caratteri che, anche con "WordWrap" non impostato, veniva comunque visualizzata su 2 righe, e non su una.
Credo che sia quella che mi fa sballare il tutto, ma purtroppo poggi non riesco a verificare
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 18, 2024, 12:54:38 pm
Ciao,
confermo la mia ipotesi di ieri: la RichMemo aveva 10 righe, ho aggiunto una riga di circa 15.000 caratteri, e subito dopo il numero di righe era 12 e non 11.

Stamattina ho quindi rifatto il codice, gestendo la RichMemo nella sua interezza, e non riga per riga, ed ora sembra funzionare tutto.

Ho però un nuovo problema ... ma per questo, preferisco aprire una nuova discussione.

Grazie, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 18, 2024, 01:45:07 pm
Non ho mai usato nella mia vita RegExpr, sempre fatto ricerche classiche.

Non ti posso aiutare. Però nel pomeriggio se trovo un attimo di tempo faccio una prova.
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 18, 2024, 01:48:09 pm
Non ho mai usato nella mia vita RegExpr, sempre fatto ricerche classiche.

Non ti posso aiutare. Però nel pomeriggio se trovo un attimo di tempo faccio una prova.

Scusami, ma mentre tu scrivevi questa risposta, ho spostato la richiesta in un nuovo thread, visto che effettivamente l'argomento ora era diverso.

Grazie ancora, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 23, 2024, 11:32:36 pm
Se interessa, a questo link c'è un riferimento a SynEdit (di chi mantiene il progetto originale e attuale).
Non sò se parliamo dello stesso SynEdit, ma visto che è in pascal penso di si.

In allegato uno ScreenShot del post, e qui il link: https://en.delphipraxis.net/topic/12417-synedit-now-has-annotated-scrollbars/ (https://en.delphipraxis.net/topic/12417-synedit-now-has-annotated-scrollbars/)
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 24, 2024, 08:03:30 am
Grazie, lo terrò presente se non dovessi riuscire a fare quello che mi serve con la TRichMemo.
Al momento sembra funzionare tutto, ma se dovessi trovare qualche problema, gli do un occhio.

P.S. Synedit è già tra i componenti "standard" di Lazarus: lo trovo sotto "C:\Lazarus\components\synedit". Quello che hai postato tu, non sono riuscito a capire se è lo stesso, ma ioù aggiornato, o un altro ma con lo stesso nome !

Ciao, Mario
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: DragoRosso - Ottobre 28, 2024, 07:26:16 pm
Ho scoperto l'arcano su SynEdit. E' un componente derivato originariamente da quello che ti ho indicato io, poi mantenuto indipendentemente all'interno di Lazarus in quanto facente parte integrante dell'IDE.
Da quello che vedo, ogni tanto lo riallineano (alcune nuove caratteristiche sono comuni ai due "componenti").

Il componente DesignTime della LCL è scorporato da quello interno di Lazarus (entrambi installati nell'IDE), quindi può essere sostituito. Usando però quello su github è evidente che ci si troverà di fronte ad un componente non perfettamente identico a quello originale, quindi con adattamento del codice utente. Inoltre ad ogni aggiornamento di Lazarus và reinstallato il nuovo componente e verificato.

Ovviamente quello LCL mantenuto dal team di Lazarus è compatibile sempre (a meno di avvisi di incompatibilità nelle release note), quello esterno su github è da verificare ogni volta ovviamente.
Titolo: Re:Sostituire una SynEdit con ?
Inserito da: bonmario - Ottobre 28, 2024, 07:35:50 pm
Grazie !!!