Newsgroup: it.comp.lang.c++
Titolo: quale oggetto VCL usare?

Ciao,
uso C++ Builder 1. Ho due finestre. In una c'e' un testo. L'altra e' vuota.
Io vorrei che il testo nella prima finestra apparisse come tale, ma fosse in
realta' una sequenza di oggetti che possono essere trascinati nella seconda.
Per adesso le due finestre sono di tipo RichEdit,  ma non e' esattamente
quello che mi serve.
Non voglio il comportamento di un word processor, voglio che le parole si
comportino come oggetti atomici. Meglio ancora se potessi avere entrambi i
comportamenti, cioe' se fosse anche facile editare il testo della prima
finestra, ma la cosa importante e' che sia intuitivo prendere una parola e
trascinarla nell'altra finestra.
Chi mi suggerisce quali componenti della VCL usare?
Grazie
Roberto




Sarebbe meglio che spiegassi con precisione a cosa ti servono queste
finestre. Comunque, da quello che ho capito, le parole formano un
normale testo multilinea editabile e tu vorresti poter trascinare le
parole da una finestra all'altra. Sarebbe diverso, e piu` semplice se
si trattasse di una lista di parole (in una o tutte e due le finestre)
che stanno ciascuna in una riga.
Basandosi sulle scarse notizie che fornisci, e supponendo che si
tratti di normale testo multilinea, la cosa piu` semplice mi pare sia
quella di continuare a usare i RichEdit e imitare il comportamento di
molti editor di testo e word processors che permettono di trascinare
una porzione di testo selezionata da una parte all'altra del documento
col drag & drop. La differenza e` che qui si tratta di finestre
diverse, ma la sostanza non cambia granche`: si tratta di gestire gli
eventi di drag & drop, facendo in modo che al drop il testo
selezionato nella prima finestra venga copiato nella seconda (ed
eventualmente cancellato dalla prima se l'operazione e` di
spostamento) nella posizione in cui si trova il puntatore del mouse
quando il pulsante viene rilasciato (prima o dopo la parola corrente).
Se vuoi garantire che solo le parole siano oggetto del trascinamento
dovrai anche gestire un po' di eventi di input per far si` che siano
selezionate solo le parole, magari automaticamente quando ci passa
sopra il puntatore del mouse.
La soluzione piu` appropriata dipende comunque dall'uso specifico che
viene fatto delle due finestre in questione, e del testo contenuto,
nell'ambito del programma.
Saluti
Paolo

 finestre. Comunque, da quello che ho capito, le parole formano un
hmm.. si non sono stato molto chiaro, anche perche' non ho molta chiarezza
nemmeno nella mia testa. Ci riprovo:
Leggo un file di testo, che viene "tokenizzato" e ogni parola va a finire
nel campo text di un oggetto di tipo:
class Tparola {
  ...
  ...   // tante belle cose
  string text;      // testo della parola (string e' di STL).
}
Dal testo originale arrivo ad avere un
vector<Tparola>  v;   // vettore che contiene oggetti di tipo Tparola.
Nella prima finestra deve comparire il testo completo, ma ogni parola
dovrebbe essere in realta' un oggetto di tipo Tparola, in modo che, per
esempio, posso associare dei metodi di questa classe ad eventi particolari.
Per esempio, potrei volere per ogni parola un menu contestuale da cui
richiamare alcune caratteristiche della parola stessa, oppure la sua ricerca
in un dizionario.
In particolare poi deve essere possibile fare drag'n'drop di parola dalla
prima finestra alla seconda.
E' per questo che non mi va bene RichEdit: io non voglio fare drag'n'drop di
una porzione di testo, ma di un oggetto di tipo Tparola, che sullo schermo
viene "rappresentato" dal suo campo text.
Posso anche rinunciare alla possibilita' di editare il testo che e' sulla
prima finestra.
Concludo spiegando a cosa serve questa roba, cosi' magari si capisce anche
meglio.
Ho un testo e devo estrarre alcune parole, per preparare un esercizio per
bambini, che poi dovranno (con un altro programma) riempire i buchi mancanti
(il classico "fill the blanks").
Grazie per l'attenzione!
Roberto

 prima finestra.
La seguente osservazione, che spero non urti nessuno, non ha
intenzioni polemiche, ma vorrei segnalare e sottoporre a riflessione
un problema che mi sembra ricorrente: veramente non riesco a capire
come mai cosi` di frequente capitano domande in cui il contesto e le
informazioni strettamente pertinenti al problema in oggetto vengono
esposte in maniera vaga o omesse del tutto. Anche non avendo una
grande esperienza di programmazione, un po' di riflessione dovrebbe
rendere evidenti quali sono le circostanze e le "specifiche" attinenti
col problema in questione. Mi sbaglio? C'e` qualcosa che mi sfugge?
Forse quello che a me sembra ovvio per altri non lo e`?
Prendiamo il caso specifico: mancano informazioni come:
- In che modo vuoi visualizzare le parole sulla seconda finestra? Una
dietro l'altra, in colonna, nella posizione in cui vengono messe, come
le label? Possono avere tutte lo stesso font/sfondo/colore o ciascuna
deve poter avere caratteristiche visuali indipendenti?
- Che ci fai con le parole che stanno sulla seconda finestra? Si, dici
che vuoi realizzare degli esercizi di "inserimento di parole
mancanti", ma in che modo?
Come dovrebbe funzionare tutto il marchingegno?
- Che succede al testo contenuto nella prima finestra? Deve restare
con lo spazio vuoto, quando trascini via una parola? E poi come lo
utilizzi, che ne fai?
Non stai chiedendo qualcosa come: come si fa in C++Builder a
visualizzare dei bitmaps in un ListBox? A domande come questa si
possono dare risposte abbastanza precise anche senza conoscere il
contesto.
Quello che chiedi tu e` come SAREBBE MEGLIO fare qualcosa che puo`
essere realizzata in tanti modi diversi.
A seconda dei casi potrebbe essere il caso di utilizzare textbox,
richedit, memo, label, listbox, grid, controlli custom, e comunque
quello che descrivi (associare una rappresentazione grafica di una
parola a un oggetto di tipo "TParola" e fare il drag & drop tra due
finestre) si puo` realizzare e far funzionare con ciascuno di questi
componenti e con loro combinazioni. Tra l'altro, se il programma e`
piuttosto semplice e la parte preponderante e` questo spostamento di
parole, potrebbe anche essere consigliabile seguire un percorso
marcatamente "RAD oriented" e incapsulare direttamente i dati negli
oggetti grafici (ma, ancora: quali sono questi dati associati alla
parola?)
In ogni caso, perche` si possa dare un parere che non sia campato per
aria, e` necessario specificare BENE cosa vuoi ottenere e in che modo.
Non trovi? Non trovate?
Saluti
Paolo

 parola?)
Preferirei tenere il piu' possibile separati i dati dell'applicazione dagli
oggetti grafici.
Ma perche'  e' cosi' importante sapere che dati ci sono dentro quell'oggetto
Tparola?
Grazie per la tua risposta.
Ciao
Roberto