Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
105 lines
3.2 KiB
Plaintext
105 lines
3.2 KiB
Plaintext
#DEFINE SYSMETRIC_VSCROLLBARWIDTH 5 && Width of a vertical scroll bar
|
|
#DEFINE SYSMETRIC_WINDOWBORDERWIDTH 10 && Width of a window border
|
|
|
|
*!* 22.08.2026
|
|
*!* marius.mutu
|
|
*!* distribuie - imparte spatiul liber sau lipsa dintr-un grid proportional cu latimile de
|
|
*!* referinta (baseline) ale coloanelor vizibile; baseline-ul se captureaza per coloana, dupa
|
|
*!* Name, la prima intalnire a fiecarei coloane pe fiecare grid, si nu se mai modifica dupa aceea
|
|
|
|
Define Class oGridLatimi As Custom
|
|
|
|
nLatimeMinima = 30 && sub acest prag coloana nu mai afiseaza nimic lizibil
|
|
oBaseline = .Null.
|
|
|
|
Procedure Init
|
|
This.oBaseline = Createobject('Collection')
|
|
Endproc
|
|
|
|
Procedure distribuie
|
|
Lparameters toGrid
|
|
|
|
Local lnColCount, lnI, lnUltimaCol, lnLatimeUtila, lnSpatiuLiber, lnSumBaseline, lnSumaAlocata, lnTarget
|
|
Local lcGridKey, lnKeyIndex, llModificat
|
|
Local loBaselineGrid, loCol
|
|
|
|
If Vartype(m.toGrid) <> 'O'
|
|
Return .F.
|
|
Endif
|
|
|
|
lnColCount = toGrid.ColumnCount
|
|
If m.lnColCount <= 0
|
|
Return .F.
|
|
Endif
|
|
|
|
* baseline separat per grid, identificat prin adresa obiectului - un al doilea grid nu mosteneste baseline-ul primului
|
|
lcGridKey = Sys(1272, m.toGrid)
|
|
lnKeyIndex = This.oBaseline.Getkey(m.lcGridKey)
|
|
If m.lnKeyIndex = 0
|
|
loBaselineGrid = Createobject('Collection')
|
|
This.oBaseline.Add(m.loBaselineGrid, m.lcGridKey)
|
|
Else
|
|
loBaselineGrid = This.oBaseline.Item(m.lnKeyIndex)
|
|
Endif
|
|
|
|
* coloana noua sau intalnita prima data pe acest grid - latimea ei curenta devine referinta
|
|
For lnI = 1 To m.lnColCount
|
|
loCol = toGrid.Columns(m.lnI)
|
|
If loCol.Visible And loBaselineGrid.Getkey(loCol.Name) = 0
|
|
loBaselineGrid.Add(loCol.Width, loCol.Name)
|
|
Endif
|
|
Endfor
|
|
|
|
* coloanele scoase cu RemoveObject nu mai sunt in toGrid.Columns - se ignora automat, baseline-ul lor ramane neatins
|
|
lnSumBaseline = 0
|
|
lnUltimaCol = 0
|
|
For lnI = 1 To m.lnColCount
|
|
loCol = toGrid.Columns(m.lnI)
|
|
If loCol.Visible
|
|
lnSumBaseline = m.lnSumBaseline + loBaselineGrid.Item(loCol.Name)
|
|
lnUltimaCol = m.lnI
|
|
Endif
|
|
Endfor
|
|
|
|
If m.lnUltimaCol = 0 Or m.lnSumBaseline <= 0
|
|
Return .F.
|
|
Endif
|
|
|
|
lnLatimeUtila = toGrid.Width
|
|
If toGrid.ScrollBars = 2 Or toGrid.ScrollBars = 3
|
|
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_VSCROLLBARWIDTH)
|
|
Endif
|
|
If toGrid.BorderStyle = 1
|
|
lnLatimeUtila = m.lnLatimeUtila - Sysmetric(SYSMETRIC_WINDOWBORDERWIDTH) * 2
|
|
Endif
|
|
|
|
lnSpatiuLiber = m.lnLatimeUtila - m.lnSumBaseline
|
|
|
|
llModificat = .F.
|
|
lnSumaAlocata = 0
|
|
For lnI = 1 To m.lnColCount
|
|
loCol = toGrid.Columns(m.lnI)
|
|
If loCol.Visible And m.lnI <> m.lnUltimaCol
|
|
lnTarget = loBaselineGrid.Item(loCol.Name) + Round(m.lnSpatiuLiber * loBaselineGrid.Item(loCol.Name) / m.lnSumBaseline, 0)
|
|
lnTarget = Max(m.lnTarget, This.nLatimeMinima)
|
|
lnSumaAlocata = m.lnSumaAlocata + m.lnTarget
|
|
If loCol.Width <> m.lnTarget
|
|
loCol.Width = m.lnTarget
|
|
llModificat = .T.
|
|
Endif
|
|
Endif
|
|
Endfor
|
|
|
|
* ultima coloana vizibila primeste restul exact, ca sa nu ramana pixeli goi din rotunjire
|
|
loCol = toGrid.Columns(m.lnUltimaCol)
|
|
lnTarget = Max(m.lnLatimeUtila - m.lnSumaAlocata, This.nLatimeMinima)
|
|
If loCol.Width <> m.lnTarget
|
|
loCol.Width = m.lnTarget
|
|
llModificat = .T.
|
|
Endif
|
|
|
|
Return m.llModificat
|
|
Endproc
|
|
|
|
Enddefine
|