Files
comun/skills/roa-vfp-frx-report/references/preview-png.md
2026-09-24 23:07:59 +03:00

2.1 KiB

Preview PNG (REPORTBEHAVIOR 90)

Fereastra de capturat este "Report Preview - .frx [- Page N]", copil al shell-ului VFP. NU "Report Designer" si NU fereastra Command Window. Captura pe fereastra gresita = certifici designerul/desktop-ul, nu pagina.

Cum gasesti fereastra

  • Preview-ul NU e top-level: EnumWindows pe proces intoarce doar shell-ul VFP ("Microsoft Visual FoxPro"), iar fereastra de pagina e un copil al lui. Captura corecta = EnumChildWindows pe shell si filtrare dupa titlul care contine Report Preview.
  • Fereastra de pagina are titlul Report Preview - <raport>.frx - Page N. Bara de unelte e o fereastra mica (aceeasi radacina de titlu, inaltime mica) si se exclude prin filtrul de dimensiune (>200x200); daca umbreste pagina, muta-o cu MoveWindow.

Runner

.prg (precompilat) cu: cursor de test + SET REPORTBEHAVIOR 90 + REPORT FORM <frx> PREVIEW NOWAIT + INKEY(<sec>) + QUIT; ON ERROR scrie in log si QUIT. Apoi:

powershell -File scripts\randare_preview.ps1 -Fxp <ui.FXP> -Png <png> [-TitleMatch <nume>]

Scriptul lanseaza vfp9, capteaza fereastra copil de preview si opreste procesul la final (nu lasa vfp9 viu).

Watchdog

randare_preview.ps1 este runnerul controlat pentru preview: are nevoie de procesul VIV in timpul INKEY, deci nu poate fi asteptat de watchdog-ul care asteapta iesirea procesului. Toate celelalte rulari vfp9 (build, randare ASCII, structura) trec prin COMUN\utile\Teste\watchdog_vfp.ps1 -Script <prg> -TimeoutSec 120 -AutoDismiss -OutDir <dir>.

Capcane de preview

  • _REPORTPREVIEW = "ZOOM 100" NU e zoom: VFP cauta un fisier zoom 100.prg (eroare "File 'zoom 100.prg' does not exist"). Zoom-ul e doar buton owner-drawn in toolbar, nu se seteaza programatic.
  • Preview-ul nativ la 100% afiseaza pagina intreaga (r6): marginea paginii se vede, restul e desktop gri. Un cap de coloana care pare taiat e text care iese din coloana, nu pagina (nota inversa din r5 era inselatoare). Confirma intai max(HPOS+WIDTH) <= latimea paginii, apoi citeste PNG-ul.