Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git, nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de cercetare pe care se sprijina modificarile din cod. O stergere acolo era definitiva. Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele fisierelor de test la care se refereau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
147 lines
7.7 KiB
Markdown
147 lines
7.7 KiB
Markdown
# Cercetare: buton comutator creion/discheta (decizia 9, plan #13)
|
|
|
|
Verificat pe cod la 09.08.2026. Metoda: `vfp_symbols.ps1` (`-Class`, `-Find`, `-Where`, `-Grep -CodeOnly`)
|
|
peste indexul ROAFACTURARE, plus `Grep`/`Read` directe pe `.vc2`.
|
|
|
|
## 1. Clase de buton in `COMUN\clase\cmd_butoane.vc2` — salvare / modificare
|
|
|
|
Fisierul e o insiruire de `DEFINE CLASS ... AS buton OF "_cmd_base.vcx"` (butoane simple) si
|
|
`... AS cmd_buton OF "_cmd_base.vcx"` (variante). Doar doua clase au legatura directa:
|
|
|
|
- **`but_modifica`** — `cmd_butoane.vc2:184-198`
|
|
```
|
|
184: DEFINE CLASS but_modifica AS buton OF "_cmd_base.vcx"
|
|
188: caction = inainte_de_do_modifica
|
|
189: cpicturedown = modific_jos.bmp
|
|
190: cpictureup = modific_sus.bmp
|
|
193: Picture = ..\grafice\modific_sus.bmp
|
|
194: ToolTipText = "Modificare (CTRL+M)"
|
|
195: Visible = .F.
|
|
```
|
|
- **`but_salveaza`** — `cmd_butoane.vc2:340-352`
|
|
```
|
|
340: DEFINE CLASS but_salveaza AS buton OF "_cmd_base.vcx"
|
|
344: caction = do_salvare
|
|
345: cpicturedown = save_jos.bmp
|
|
346: cpictureup = save_sus.bmp
|
|
348: Picture = ..\grafice\save_sus.bmp
|
|
349: ToolTipText = "Salvare"
|
|
```
|
|
|
|
Nu exista o clasa `but_salvare` (fara "ea") — numele real e `but_salveaza`. Nicio alta clasa din
|
|
fisier (`but_reset`, `but_reface`, `but_retur`, `cmd_modifica` etc.) foloseste imagini de
|
|
discheta sau de creion.
|
|
|
|
## 2. Clasa efectiva a lui `but_modifica` in formularele de facturare
|
|
|
|
Cautat in `COMUN\clase\ofacturare_comun.vc2`, `COMUN\clase\ofacturare.vc2`,
|
|
`Clase\ofundal_facturare.vc2` (`ofacturare_comun.vc2` e cel corect; `Clase\ofacturare.vc2` din
|
|
prompt nu exista — clasa reala e in `COMUN\clase\ofacturare.vc2`).
|
|
|
|
- `ofacturare_comun.vc2:1424-1432` — `frm_facturi` (lista de facturi), `ADD OBJECT 'but_modifica1'
|
|
AS but_modifica WITH ... Picture = ..\grafice\modific_sus.bmp` (override explicit, egal cu
|
|
default-ul clasei). `caction` nu e suprascris pe instanta -> ramane `inainte_de_do_modifica` din
|
|
clasa. Metoda `inainte_de_do_modifica` (referita si in plan la J) e la
|
|
`ofacturare_comun.vc2:4925-4934` si azi deschide un `xmenu()`, nu comuta imaginea.
|
|
- `ofacturare_comun.vc2:1434-1443` — `But_modifica2` pe acelasi `frm_facturi`, tot `AS but_modifica`,
|
|
cu `caction = do_modifica_explicatie`; fara `Picture` propriu (mosteneste creionul).
|
|
- `COMUN\clase\ofacturare.vc2:4313, 11192, 19472, 22734` — patru instante `ADD OBJECT
|
|
'But_modifica1' AS but_modifica`, apartinand `frm_articole_compuse` (`:4212-5216`),
|
|
`frm_facturare_articole` (`:10968-15739` — formularul de compunere de azi), `frm_nomrute`
|
|
(`:19357-19551`) si `frm_rute` (`:22510-22821`). Niciuna nu are `Picture` pe instanta.
|
|
- **Nicio instanta `but_salveaza` / `but_salvare` gasita** in niciunul din cele trei fisiere
|
|
cautate. Formularele de facturare de azi nu au un buton dedicat de "salvare antet" — antetul se
|
|
salveaza azi prin `frm_modifica_factura` cu bife (`ofacturare_comun.vc2:5262-5774`, vezi si
|
|
planul, sectiunea I), nu printr-un buton `but_salveaza` separat.
|
|
|
|
Concluzie pe punctul 2: `but_modifica1`/`But_modifica2` de pe `frm_facturi` si toate cele patru
|
|
`But_modifica1` din `ofacturare.vc2` sunt instante ale clasei `but_modifica` din
|
|
`cmd_butoane.vc2`, fara suprascriere de comportament — ele raman butoane simple de deschidere, nu
|
|
comutatoare.
|
|
|
|
## 3. Precedent de schimbare a `Picture` la runtime (comutator modifica/salveaza)
|
|
|
|
**Exista precedent, si e exact tiparul cerut.** `COMUN\clase\rulaje.vc2`, metoda
|
|
`frm_rulaje.se_modifica_assign` (assign-method pe proprietatea `se_modifica` a formularului),
|
|
`rulaje.vc2:4716-4773`:
|
|
|
|
```
|
|
4745: If m.llEditMode && TREC IN MODUL EDITARE
|
|
4747: With Thisform.but_modifica1
|
|
4748: .cpicturedown = "save_jos.bmp"
|
|
4749: .cpictureup = "save_sus.bmp"
|
|
4750: .Picture = "save_sus.bmp"
|
|
4751: .ToolTipText = "Salvare"
|
|
4752: .Enabled = .T.
|
|
4753: .Refresh()
|
|
4754: Endwith
|
|
4755: Else
|
|
4760: With Thisform.but_modifica1
|
|
4761: .cpicturedown = "MODIFICA2.BMP"
|
|
4762: .cpictureup = "MODIFICA1.BMP"
|
|
4763: .Picture = "MODIFICA1.BMP"
|
|
4764: .ToolTipText = "Modificare"
|
|
4765: .Enabled = .T.
|
|
4766: ENDWITH
|
|
4769: Endif
|
|
```
|
|
|
|
`but_modifica1` pe `frm_rulaje` e instantiat `ADD OBJECT 'but_modifica1' AS but_modifica WITH ...`
|
|
(`rulaje.vc2:727-737`, clasa `but_modifica` din `cmd_butoane.vcx`, fara `Picture` propriu pe
|
|
instanta — pleaca de la creion, cf. clasa). Tiparul confirmat: la comutare se rescriu **impreuna**
|
|
`.cpicturedown`, `.cpictureup` **si** `.Picture` (nu doar `.Picture` — altfel hover-ul din
|
|
`buton.MouseEnter`/`MouseLeave`, `_cmd_base.vc2:88-97`, ar reveni la iconita veche la urmatorul
|
|
mouse-over), plus `.ToolTipText` si `.Refresh()`.
|
|
|
|
Nu exista alt precedent care sa comute intre creion si discheta pe acelasi buton; celelalte hit-uri
|
|
pe `.Picture =` gasite in suita (`baza.vc2`, `otouchscreen.vc2`, `ferestre_seturi_indicatori.vc2`
|
|
etc.) sunt fie hover MouseEnter/Leave standard (`this.Picture = this.cPictureDown/Up`), fie
|
|
schimbari de iconita fara legatura cu modificare/salvare (tab-uri, bife, animatii).
|
|
|
|
## 4. Imaginea de discheta pe disc si rezolvarea caii
|
|
|
|
Fisiere confirmate pe disc (`Get-ChildItem` recursiv in `D:\ROA\ROAFACTURARE`):
|
|
|
|
```
|
|
COMUN\grafice\save_sus.bmp
|
|
COMUN\grafice\save_jos.bmp
|
|
COMUN\grafice\modific_sus.bmp
|
|
COMUN\grafice\modific_jos.bmp
|
|
COMUN\grafice\modifica1.bmp
|
|
COMUN\grafice\modifica2.bmp
|
|
```
|
|
|
|
Nu exista niciun `save*.bmp`/`modific*.bmp` sub `D:\ROA\ROAFACTURARE\Grafice` (folderul propriu al
|
|
proiectului) — toate traiesc in `COMUN\grafice`.
|
|
|
|
Rezolvarea caii: clasa foloseste cale relativa la definirea proprietatii (`..\grafice\save_sus.bmp`,
|
|
rezolvata de VFP fata de `.vcx`-ul clasei la Init). Codul de runtime din `rulaje.vc2` seteaza insa
|
|
**nume de fisier fara cale** (`"save_sus.bmp"`, `"MODIFICA1.BMP"`), care se rezolva prin
|
|
`SET PATH` — verificat in `Programe\roafacturare.prg:85-108`: `lcPath` include atat
|
|
`gcAppPath + 'GRAFICE;'` cat si `gcAppPath + 'COMUN\GRAFICE;'`, `SET PATH TO &lcPath ADDITIVE`. Deci
|
|
o alocare `.Picture = "save_sus.bmp"` la runtime se rezolva corect, indiferent daca fisierul e in
|
|
`Grafice\` sau `COMUN\Grafice\`, atata timp cat numele fara cale e folosit (nu resursa inclusa in
|
|
EXE — nu s-a gasit nicaieri mecanism de resurse compilate pentru aceste bmp-uri).
|
|
|
|
## 5. Metoda de biblioteca `do_activeaza`/`do_dezactiveaza` pe clase de buton
|
|
|
|
**Neverificat -> verificat, raspuns: nu exista pe clasele de buton.** Cautat in
|
|
`COMUN\clase\_cmd_base.vc2` (clasele `_cmdbase`, `buton`, `cmd_buton`) — nicio metoda
|
|
`do_activeaza`/`do_dezactiveaza`. Mecanismul exista doar pe clase de **container/camp**, nu de
|
|
buton, cf. si planului insusi (`docs\plan_13_unificare_formular_facturare.md`, sectiunea I):
|
|
`ct_clb_cautare.do_activeaza`/`do_dezactiveaza` (`caut_ora.vc2:780-806`, dar neapelate azi in
|
|
`ofacturare_comun.vc2`) si `clb_tx_data.dezactiveaza()`/`reactiveaza()` (`lb_tx.vc2:521-538`,
|
|
singura reteta completa: `ReadOnly` + `TabStop` + butonul de calendar). Pe butoane, controlul se
|
|
face direct pe `.Enabled`/`.Visible` (asa cum face si `se_modifica_assign` din rulaje.vc2 mai sus).
|
|
|
|
## Rezumat pentru implementare
|
|
|
|
- Clasa de folosit pentru discheta: `but_salveaza` (`cmd_butoane.vc2:340-352`) — dar tiparul din
|
|
`rulaje.vc2` **nu instantiaza a doua clasa**; comuta o singura instanta `but_modifica` intre cele
|
|
doua seturi de imagini prin `.cpicturedown`/`.cpictureup`/`.Picture`. E reteta direct aplicabila
|
|
cerintei din decizia 9.
|
|
- Numele de fisier de folosit: `save_sus.bmp` / `save_jos.bmp` (discheta), `modific_sus.bmp` /
|
|
`modific_jos.bmp` sau `MODIFICA1.BMP` / `MODIFICA2.BMP` (creion — doua perechi echivalente
|
|
coexista pe disc; `rulaje.vc2` foloseste a doua pereche, clasa foloseste prima).
|
|
- Fara cale in fata numelui de fisier — se rezolva prin `SET PATH`.
|