Newsgroup: it.comp.programmare.win32
Titolo: [forse OT] Risorse in più lingue.

Salve a tutto l'NG.
Sto traducendo una mia applicazione in  un'altra lingua e sto trovando
"lungo" a adattare tutte le iniziali per i menů (tipo &Apri -> &Open) per
non parlare di quando poi la lunghezza del testo mi penalizza
l'allineamento; non č che esiste un modo piů semplice ?
Grazie a tutti
Drugo

 l'allineamento; non č che esiste un modo piů semplice ?
Per l'allineamento basterebbe usare qualche libreria furba che permette un
allineamento in base alle dimensioni minime di un controllo (ad esempio
wxWindows e QT lo fanno).
Tu cosa usi MFC? Strano che nessuno abbia mai pensato di scriverne una
versione per MFC.
-- 
Marco Barisione
http://spazioinwind.libero.it/marcobari/

 
http://spazioinwind.libero.it/marcobari/
Si, l'applicazione è stata scritta con MFC.
Cmq grazie
Drugo

 una versione per MFC.
davvero non c'è una libreria di layout per MFC? persino WTL ce l'ha
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.2. C, C++ and ASM developers
                               and beta testers are welcome!

 davvero non c'č una libreria di layout per MFC? persino WTL ce l'ha
Non so, mai usato le MFC. Perň chi usa MFC su questo ng ha detto piů volte
cosě, quindi penso sia cosě.


 Marco Barisione
Scusate, ma cos'č una libreria di layout ?
Drugo

 Scusate, ma cos'č una libreria di layout ?
Quando con le API di Windows e, da quello che mi dicono, con le MFC crei un
controllo gli passi delle coordinate e le dimensioni. Se la finestra č
ridimensionabile devi gestirti tu manualmente il ridimensionamento dei
controlli.
Per questo generalmente su Windows le Dialog non sono ridimensionabili e
son progettate con dimensioni esatte per la lingua originale e per il font
di default. Quando perň si cambia il font (magari per problemi di vista č
necessario utilizzarne uno molto grande) o la lingua si assiste allo
strabordare del testo.
Il problema sarebbe risolto se ci fosse un modo per gestire questo
automaticamente, ad esempio (da guardare con un font a spaziatura fissa):
 ----------------------------------------------------
|  Finestra di input                              X  |
|----------------------------------------------------|
|                                                    |
|                       --------------------------   |
|  Inserire del testo: |                          |  |
|                       --------------------------   |
|                                                    |
|                     ------------    ------------   |
|                    |     OK     |  |  Annulla   |  |
|                     ------------    ------------   |
 ----------------------------------------------------
Ciň che vogliamo č che la label in cui c'č il testo "Inserire del testo:"
rimanga di dimensioni fissi, le minime possibili per vsualizzare tutto il
testo, mentre il controllo di testo deve espandersi orizzontalmente.
Sotto ci sono i due pulsanti che devono rimanere di dimensioni fisse stando
sulla destra.
Per fare questo utilizziamo un sizer globale per la finetra che contiene
due sotto sizer, 1 per riga di controlli. In mezzo a questi due mettiomo
uno spaziatorre in modo che i pulsanti rimangano sempre nel margine
inferiore della finestra.
Ecco un piccolo esempio in Python utilizzando la libreria wxPython
(dovrebbe essere comprensibile anche senza conoscere Python, i commeni
iniziano con #):
# Importa wxPython
import wx
# Crea un oggetto applicazione
app = wx.PySimpleApp()
# Crea la dialog e i vari controlli
dialog = wx.Dialog(None, -1, 'Finestra di input',
                   style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
static = wx.StaticText(dialog, -1, 'Inserire del testo:  ')
text = wx.TextCtrl(dialog, -1, '')
ok = wx.Button(dialog, wx.ID_OK, 'OK')
cancel = wx.Button(dialog, wx.ID_CANCEL, 'Annulla')
# Primo sizer orizzontale
hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
# Inserisco il controllo di testo statico, il primo 0 significa di non
# espandersi nella direzione principlare del sizer, cioč orizzontalmente.
# Il secondo non lo fa espandere nell'altra direzione.
hsizer1.Add(static, 0, 0)
# Inserisco il controllo di testo, questo si espande orizzontalmente ma
# non verticalmente.
hsizer1.Add(text, 1, 0)
# Secondo sizer orizzontale, quello dei pulsanti
hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
# Inserisco semplicemente i due controlli dicendogli di non espanderli
hsizer2.Add(ok, 0, 0)
hsizer2.Add(cancel, 0, 0)
# Sizer principale, č verticale
vsizer = wx.BoxSizer(wx.VERTICAL)
# Inserisco la prima riga (hsizer1) dicendogli di non espandersi
# verticalmente ma di espandersi orizzontalmente (wx.EXPAND), inoltre
# aggiungo un bordo tutto ditorno (wx.ALL) di 10 pixel (cosě č piů bello).
vsizer.Add(hsizer1, 0, wx.ALL | wx.EXPAND, 10)
# Aggiungo uno spazio, i primi due zeri indicano le dimensioni iniziali
# dello spazio (che verranno modificate poi con il ridimensionamento della
# finestra).
# Lo spazio si espande verticalmente (1) ma non orizzontalmente (0)
vsizer.Add(0, 0, 1, 0)
# Aggiungiamo i due pulsanti contenuti in hsizer2. Non si espandono
# verticalmente e orizzontalmente ma sono allineati a destra
(wx,ALIGN_RIGHT)
# con bordo di 10 pixel tutto attorno (wx.ALL)
vsizer.Add(hsizer2, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
# Impostiamo vsizer come sizer della dialog
dialog.SetSizer(vsizer)
# Mostriamo la dialog
dialog.ShowModal()
Ecco il risultato:
http://spazioinwind.libero.it/marcobari/tmp/sz_small.gif
http://spazioinwind.libero.it/marcobari/tmp/sz_big.gif
Con un po' di modifiche minori č possibile migliorare il risultato.
Ovviamente il tutto puň essere reso piů semplice utilizzando un designer
per realizzare le interfacce grafiche invece di fare tutto a mano.
Che librerie gestiscono i sizer? Io conosco QT, wxWindows, GTK, tk, VCL.
Altri?


 Scusate, ma cos'č una libreria di layout ?
č quello che cerchi: una roba che tiene i controlli sulla tua dialog in 
una certa posizione reciproca e con certe dimensioni, senza bisogno che 
tu scriva codice per farlo
