* test_splitter_mouse.prg - tragere REALA cu mouse-ul (SetCursorPos/mouse_event) pe Sfsplitterv1 din frm_import_efactura * param tcPoz: pozitia pusa in ini-ul temporar inainte de deschidere (gol = fara cheie) * param tcDesch (mod E): de cate ori se deschide formularul in aceeasi sesiune (implicit 1) PARAMETERS tcPoz, tcMod, tcDesch SET SAFETY OFF SET TALK OFF SET DELETED ON SET EXACT ON SET CENTURY ON SET DATE DMY SET NULLDISPLAY TO '' CLOSE DATABASES PUBLIC gcUILog, gnPass, gnFail, gcTempIni, gnRepaus, gnDesch gnRepaus = RGB(160,185,210) gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_mouse_log.txt" gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_mouse_temp.ini" gnPass = 0 gnFail = 0 IF FILE(gcTempIni) DELETE FILE (gcTempIni) ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog) ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT TRY SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')' QUIT ENDIF SET PROCEDURE TO import_efactura.prg ADDITIVE SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE gcGeneralIniFile = m.gcTempIni DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcGeneralIniFile=' + m.gcGeneralIniFile *-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din test_pozitie_lista_ef.prg TEXT TO lcSchemaFacturi NOSHOW ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, explicatia4ROA V(100) null, explicatia5ROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(80), gest c(1), part_inactiv N(1) ENDTEXT IF USED('crsFacturi') USE IN crsFacturi ENDIF CREATE CURSOR crsFacturi (&lcSchemaFacturi) INSERT INTO crsFacturi (ales, id, id_fact, data_act, numar_act, xfurnizor, partener, cod_fiscal, ; total_cu_tva, nume_valuta, procesat, completat, completatdet, creditnote, detalii, ; eligibil_lot, motiv_lot, eroare_lot, de_completat, gest) ; VALUES (0, 1, 0, DATE(), 'TEST-SPL-1', 'FIXTURA SPLITTER 1', 'FIXTURA SPLITTER 1', 'RO99970001', ; 100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '') TEXT TO lcSchemaDetalii NOSHOW distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6), explicatia V(100), explicatia4 V(100), explicatia5 V(100) ENDTEXT IF USED('crsDetaliiFacturi') USE IN crsDetaliiFacturi ENDIF CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii) * rand mut pe id_efactura=1, ca actualizeaza_grid2 sa gaseasca detaliile deja in cursor (fara poFacturiDetalii/Oracle) INSERT INTO crsDetaliiFacturi (id, id_efactura, nr, articol) VALUES (100, 1, 1, 'FIXTURA') CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) SELECT cTipArticoleP GO TOP IN cTipArticoleP INDEX ON ordine TAG ordine CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) SELECT cTipArticoleE GO TOP IN cTipArticoleE INDEX ON ordine TAG ordine SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip SELECT cTip INDEX ON id TAG id goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni') SELECT cGestiuni APPEND BLANK INDEX ON id_gestiune TAG id_gest SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2 goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO') SELECT cUMISO INDEX ON cod_um_iso TAG cod_um_iso goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM') SELECT cUM INDEX ON id TAG id IF VARTYPE(m.tcPoz) = "C" AND !EMPTY(m.tcPoz) AND m.tcPoz # "-" AND m.tcPoz # "0" setini(m.gcTempIni, 'efactura', 'import_splitter_top', m.tcPoz) DO PrLogLocal WITH 'ini temporar: import_splitter_top=' + m.tcPoz ENDIF DECLARE INTEGER SetCursorPos IN user32 INTEGER, INTEGER DECLARE mouse_event IN user32 INTEGER, INTEGER, INTEGER, INTEGER, INTEGER DECLARE INTEGER ClientToScreen IN user32 INTEGER, STRING @ DECLARE INTEGER WindowFromPoint IN user32 INTEGER, INTEGER DECLARE INTEGER GetAncestor IN user32 INTEGER, INTEGER DECLARE INTEGER GetDC IN user32 INTEGER DECLARE INTEGER ReleaseDC IN user32 INTEGER, INTEGER DECLARE INTEGER GetPixel IN gdi32 INTEGER, INTEGER, INTEGER DECLARE INTEGER SetWindowPos IN user32 INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER DECLARE INTEGER SetForegroundWindow IN user32 INTEGER DECLARE Sleep IN kernel32 INTEGER DECLARE INTEGER GetSystemMetrics IN user32 INTEGER DECLARE INTEGER GetCursorPos IN user32 STRING @ DECLARE INTEGER GetForegroundWindow IN user32 PUBLIC goSpy, goFrmT LOCAL loForm, loS, lnX, lnY, lnTop0, lnTop1, lnI, lnStep, lcPt, lnPix, lnRoot, lnGrdH0, lnY0 _SCREEN.Visible = .T. _SCREEN.WindowState = 2 SetWindowPos(_SCREEN.HWnd, -1, 0, 0, 0, 0, 3) SetForegroundWindow(_SCREEN.HWnd) PUBLIC gcSyncDir LOCAL lnNrDesch lnNrDesch = IIF(VARTYPE(m.tcDesch) = "C" AND VAL(m.tcDesch) > 1, VAL(m.tcDesch), 1) FOR gnDesch = 1 TO m.lnNrDesch DO PrLogLocal WITH '=== deschiderea ' + TRANSFORM(gnDesch) + ' ini: import_splitter_top=' + TRANSFORM(getini(m.gcTempIni, 'efactura', 'import_splitter_top')) SELECT crsFacturi GO TOP loForm = CREATEOBJECT('frm_import_efactura', .T.) goFrmT = loForm IF VARTYPE(m.tcMod) # "C" OR m.tcMod # "M" loForm.WindowType = 0 ENDIF loS = loForm.Sfsplitterv1 DO PrLogLocal WITH 'ClassLibrary=' + loS.ClassLibrary + ' Class=' + loS.Class DO PrLogLocal WITH 'dupa Init: BackColor=' + RgbTxt(loS.BackColor) + ' BackStyle=' + TRANSFORM(loS.BackStyle) + ' Enabled=' + TRANSFORM(loS.Enabled) + ' Visible=' + TRANSFORM(loS.Visible) + ' H=' + TRANSFORM(loS.Height) goSpy = CREATEOBJECT('spionMouse') BINDEVENT(loS, 'MouseDown', goSpy, 'splDown') BINDEVENT(loS, 'MouseMove', goSpy, 'splMove') BINDEVENT(loS, 'MouseUp', goSpy, 'splUp') DO PrLogLocal WITH 'ControlCount=' + TRANSFORM(loS.ControlCount) + ' PEM gripper=' + TRANSFORM(PEMSTATUS(loS, 'gripper', 5)) BINDEVENT(loForm, 'MouseDown', goSpy, 'frmDown') BINDEVENT(loForm, 'MouseMove', goSpy, 'frmMove') BINDEVENT(loForm.grdFacturi, 'MouseDown', goSpy, 'grdDown') PUBLIC gnTopFinal, goTmr gnTopFinal = -1 IF VARTYPE(m.tcMod) = "C" AND m.tcMod = "E" gcSyncDir = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\sync_mouse\d" + TRANSFORM(gnDesch) + "\" IF !DIRECTORY(m.gcSyncDir) MD (m.gcSyncDir) ENDIF goTmr = CREATEOBJECT("tmrExtern") goTmr.Enabled = .T. loS = .NULL. loForm.Show(1) ELSE IF VARTYPE(m.tcMod) = "C" AND m.tcMod = "M" goTmr = CREATEOBJECT("tmrSecventa") goTmr.Enabled = .T. loS = .NULL. loForm.Show(1) ELSE loForm.Show() DO SecventaMouse loS = .NULL. goFrmT = .NULL. loForm.Release() ENDIF ENDIF lnTop1 = gnTopFinal goFrmT = .NULL. loForm = .NULL. goTmr = .NULL. DO PrLogLocal WITH 'ini dupa inchidere: import_splitter_top=' + TRANSFORM(getini(m.gcTempIni, 'efactura', 'import_splitter_top')) + ' (Top la inchidere=' + TRANSFORM(lnTop1) + ')' ENDFOR CATCH TO loEx DO PrLogLocal WITH 'EXCEPTIE ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' linia ' + TRANSFORM(loEx.LineNo) + ' ' + TRANSFORM(loEx.LineContents) ENDTRY DO PrLogLocal WITH 'PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) DO PrLogLocal WITH 'END' ON SHUTDOWN QUIT PROCEDURE SecventaMouse LOCAL loForm, loS, lnX, lnY, lnTop0, lnTop1, lnI, lnStep, lcPt, lnPix, lnRoot, lnGrdH0, lnY0 loForm = goFrmT loS = loForm.Sfsplitterv1 DO PrLogLocal WITH 'WindowState=' + TRANSFORM(loForm.WindowState) + ' WindowType=' + TRANSFORM(loForm.WindowType) + ' lRestaurat=' + TRANSFORM(loS.lRestaurat) Pump(25) DO PrLogLocal WITH 'dupa Show: BackColor=' + RgbTxt(loS.BackColor) + ' BackStyle=' + TRANSFORM(loS.BackStyle) + ' Top=' + TRANSFORM(loS.Top) + ' grdF.H=' + TRANSFORM(loForm.grdFacturi.Height) lcPt = BINTOC(loS.Left + 30, '4RS') + BINTOC(loS.Top + 2, '4RS') ClientToScreen(loForm.HWnd, @lcPt) lnX = CTOBIN(LEFT(lcPt, 4), '4RS') lnY = CTOBIN(SUBSTR(lcPt, 5, 4), '4RS') lnY0 = lnY lnRoot = GetAncestor(WindowFromPoint(lnX, lnY), 2) DO PrLogLocal WITH 'ecran X/Y=' + TRANSFORM(lnX) + '/' + TRANSFORM(lnY) + ' root sub punct=' + TRANSFORM(lnRoot) + ' _screen=' + TRANSFORM(_SCREEN.HWnd) + ' form=' + TRANSFORM(loForm.HWnd) + ' rootform=' + TRANSFORM(GetAncestor(loForm.HWnd, 2)) IF lnRoot # _SCREEN.HWnd AND lnRoot # GetAncestor(loForm.HWnd, 2) DO PrTest WITH 'fereastra VFP sub punctul de tragere', .F., 'abandon, nu trimit click pe alta fereastra' ELSE SetCursorPos(lnX, lnY + 150) Pump(10) lnPix = PixelEcran(lnX, lnY) DO PrLogLocal WITH 'repaus: pixel ecran=' + RgbTxt(lnPix) + ' BackColor=' + RgbTxt(loS.BackColor) + ' BackStyle=' + TRANSFORM(loS.BackStyle) + ' lHover=' + TRANSFORM(loS.lHover) DO PrTest WITH 'repaus: pixel = 160,185,210', lnPix = gnRepaus, RgbTxt(lnPix) lnI = SetCursorPos(lnX, lnY) lcPt = REPLICATE(CHR(0), 8) GetCursorPos(@lcPt) DO PrLogLocal WITH 'SetCursorPos=' + TRANSFORM(lnI) + ' imediat=' + TRANSFORM(CTOBIN(LEFT(lcPt, 4), '4RS')) + '/' + TRANSFORM(CTOBIN(SUBSTR(lcPt, 5, 4), '4RS')) Pump(10) lcPt = REPLICATE(CHR(0), 8) GetCursorPos(@lcPt) DO PrLogLocal WITH 'cursor real=' + TRANSFORM(CTOBIN(LEFT(lcPt, 4), '4RS')) + '/' + TRANSFORM(CTOBIN(SUBSTR(lcPt, 5, 4), '4RS')) + ' foreground=' + TRANSFORM(GetForegroundWindow()) lnPix = PixelEcran(lnX, lnY - 1) DO PrLogLocal WITH 'hover: pixel ecran=' + RgbTxt(lnPix) + ' BackColor=' + RgbTxt(loS.BackColor) + ' lHover=' + TRANSFORM(loS.lHover) DO PrTest WITH 'hover: BackColor = 0,120,215', loS.BackColor = RGB(0,120,215), RgbTxt(loS.BackColor) lnTop0 = loS.Top lnGrdH0 = loForm.grdFacturi.Height SetCursorPos(lnX, lnY) mouse_event(2, 0, 0, 0, 0) Pump(5) FOR lnStep = 1 TO 12 SetCursorPos(lnX, lnY - 5 * lnStep) Pump(3) ENDFOR SetCursorPos(lnX, lnY - 60) mouse_event(4, 0, 0, 0, 0) Pump(10) lnTop1 = loS.Top DO PrLogLocal WITH 'tragere sus 60: Top ' + TRANSFORM(lnTop0) + ' -> ' + TRANSFORM(lnTop1) + ' grdF.H ' + TRANSFORM(lnGrdH0) + ' -> ' + TRANSFORM(loForm.grdFacturi.Height) + ' | ' + goSpy.cRez DO PrTest WITH 'tragere sus 60 muta splitterul (+-5, pozitia = cursorul)', lnTop1 = lnTop0 - 60, 'Top ' + TRANSFORM(lnTop0) + '->' + TRANSFORM(lnTop1) DO PrTest WITH 'tragere sus: grila urmeaza splitterul', loForm.grdFacturi.Height = lnGrdH0 - 60, 'grdF.H ' + TRANSFORM(lnGrdH0) + '->' + TRANSFORM(loForm.grdFacturi.Height) goSpy.cRez = '' lcPt = BINTOC(loS.Left + 30, '4RS') + BINTOC(loS.Top + 2, '4RS') ClientToScreen(loForm.HWnd, @lcPt) lnY = CTOBIN(SUBSTR(lcPt, 5, 4), '4RS') SetCursorPos(lnX, lnY) Pump(5) lnTop0 = loS.Top SetCursorPos(lnX, lnY) mouse_event(2, 0, 0, 0, 0) Pump(5) FOR lnStep = 1 TO 12 SetCursorPos(lnX, lnY + 5 * lnStep) Pump(3) ENDFOR SetCursorPos(lnX, lnY + 60) mouse_event(4, 0, 0, 0, 0) Pump(10) DO PrLogLocal WITH 'tragere jos 60: Top ' + TRANSFORM(lnTop0) + ' -> ' + TRANSFORM(loS.Top) + ' | ' + goSpy.cRez DO PrTest WITH 'tragere jos 60 muta splitterul (+-5, pozitia = cursorul)', loS.Top = lnTop0 + 60, 'Top ' + TRANSFORM(lnTop0) + '->' + TRANSFORM(loS.Top) SetCursorPos(lnX, lnY + 250) Pump(10) lnPix = PixelEcran(lnX, lnY + 60) DO PrLogLocal WITH 'repaus dupa tragere: pixel=' + RgbTxt(lnPix) + ' BackColor=' + RgbTxt(loS.BackColor) + ' lHover=' + TRANSFORM(loS.lHover) DO PrTest WITH 'repaus dupa tragere: BackColor = 160,185,210', loS.BackColor = gnRepaus, RgbTxt(loS.BackColor) ENDIF gnTopFinal = loS.Top ENDPROC DEFINE CLASS tmrSecventa AS Timer Interval = 1500 Enabled = .F. PROCEDURE Timer This.Enabled = .F. DO SecventaMouse goFrmT.Release() ENDPROC ENDDEFINE ********************************************************** PROCEDURE Pump LPARAMETERS tnN LOCAL lnK FOR lnK = 1 TO tnN DOEVENTS FORCE Sleep(20) ENDFOR ENDPROC PROCEDURE PixelEcran LPARAMETERS tnX, tnY LOCAL lnDC, lnP lnDC = GetDC(0) lnP = GetPixel(lnDC, tnX, tnY) ReleaseDC(0, lnDC) RETURN lnP ENDPROC PROCEDURE RgbTxt LPARAMETERS tnC RETURN TRANSFORM(BITAND(tnC, 255)) + ',' + TRANSFORM(BITAND(BITRSHIFT(tnC, 8), 255)) + ',' + TRANSFORM(BITAND(BITRSHIFT(tnC, 16), 255)) ENDPROC DEFINE CLASS spionMouse AS Custom cRez = '' PROCEDURE Adauga LPARAMETERS tcS IF LEN(This.cRez) < 1500 This.cRez = This.cRez + tcS + '; ' ENDIF ENDPROC PROCEDURE splDown LPARAMETERS nB, nS, nX, nY This.Adauga('splDown b=' + TRANSFORM(nB) + ' y=' + TRANSFORM(nY)) ENDPROC PROCEDURE splMove LPARAMETERS nB, nS, nX, nY IF nB # 0 This.Adauga('splMove b=' + TRANSFORM(nB) + ' y=' + TRANSFORM(nY) + ' top=' + TRANSFORM(goFrmT.Sfsplitterv1.Top)) ENDIF ENDPROC PROCEDURE splUp LPARAMETERS nB, nS, nX, nY This.Adauga('splUp y=' + TRANSFORM(nY)) ENDPROC PROCEDURE gripDown LPARAMETERS nB, nS, nX, nY This.Adauga('gripDown') ENDPROC PROCEDURE frmDown LPARAMETERS nB, nS, nX, nY This.Adauga('frmDown y=' + TRANSFORM(nY)) ENDPROC PROCEDURE frmMove LPARAMETERS nB, nS, nX, nY IF nB = 1 This.Adauga('frmMove b=1 y=' + TRANSFORM(nY)) ENDIF ENDPROC PROCEDURE grdDown LPARAMETERS nB, nS, nX, nY This.Adauga('grdDown y=' + TRANSFORM(nY)) ENDPROC ENDDEFINE ********************************************************** PROCEDURE PrLogLocal LPARAMETERS tcMsg LOCAL lcL SET SAFETY OFF lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '') STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog) ENDPROC ********************************************************** * mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici) PROCEDURE HarnessLog LPARAMETERS tcMsg DO PrLogLocal WITH tcMsg ENDPROC ********************************************************** PROCEDURE PrErrLocal LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo) ENDPROC ********************************************************** PROCEDURE PrTest LPARAMETERS tcEticheta, tlOk, tcDetalii IF tlOk gnPass = gnPass + 1 ELSE gnFail = gnFail + 1 ENDIF DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')') ENDPROC PROCEDURE MouseReal LPARAMETERS tnFlags, tnX, tnY * eveniment mouse real, cu pozitia absoluta in eveniment (nu depinde de cursorul curent) mouse_event(tnFlags, INT(tnX * 65535 / (GetSystemMetrics(0) - 1)), INT(tnY * 65535 / (GetSystemMetrics(1) - 1)), 0, 0) ENDPROC ********************************************************** * mod E: forma modala Show(1) ca in import_efactura.prg; mouse-ul real il trimite driverul PowerShell * (drv_splitter_mouse.ps1). Schimb de semnale prin fisiere in gcSyncDir: coordN.txt (VFP->PS), doneN.txt (PS->VFP). DEFINE CLASS tmrExtern AS Timer Interval = 300 Enabled = .F. nPas = 0 nTop0 = 0 nGrdH0 = 0 nTic = 0 PROCEDURE Timer LOCAL loF, loS, lcPt, lnX, lnY, lnPix This.nTic = This.nTic + 1 loF = goFrmT loS = loF.Sfsplitterv1 DO CASE CASE This.nPas = 0 AND This.nTic >= 5 DO PrLogLocal WITH 'Enabled=' + TRANSFORM(loS.Enabled) + ' Tag=' + TRANSFORM(loS.Tag) + ' HWnd=' + TRANSFORM(loF.HWnd) + ' lHover=' + TRANSFORM(loS.lHover) DO PrLogLocal WITH 'WindowState=' + TRANSFORM(loF.WindowState) + ' lRestaurat=' + TRANSFORM(loS.lRestaurat) + ' Top=' + TRANSFORM(loS.Top) + ' grdF.H=' + TRANSFORM(loF.grdFacturi.Height) + ' det.Top/H=' + TRANSFORM(loF.grdDetaliiFacturi.Top) + '/' + TRANSFORM(loF.grdDetaliiFacturi.Height) + ' SM=' + TRANSFORM(GetSystemMetrics(0)) + 'x' + TRANSFORM(GetSystemMetrics(1)) This.ScrieCoord(1) This.nPas = 1 CASE INLIST(This.nPas, 1, 2, 3) AND FILE(gcSyncDir + 'repaus' + TRANSFORM(This.nPas) + '.txt') * PS a mutat cursorul departe: culoarea de repaus DELETE FILE (gcSyncDir + 'repaus' + TRANSFORM(This.nPas) + '.txt') lnPix = PixelEcran(This.Tag_X(), This.Tag_Y()) DO PrLogLocal WITH 'repaus' + TRANSFORM(This.nPas) + ': pixel=' + RgbTxt(lnPix) + ' BackColor=' + RgbTxt(loS.BackColor) + ' BackStyle=' + TRANSFORM(loS.BackStyle) + ' lHover=' + TRANSFORM(loS.lHover) DO PrTest WITH 'repaus' + TRANSFORM(This.nPas) + ': pixel pe banda = 160,185,210', lnPix = gnRepaus, RgbTxt(lnPix) STRTOFILE('ok', gcSyncDir + 'repausok' + TRANSFORM(This.nPas) + '.txt') CASE INLIST(This.nPas, 1, 2) AND FILE(gcSyncDir + 'hover' + TRANSFORM(This.nPas) + '.txt') DELETE FILE (gcSyncDir + 'hover' + TRANSFORM(This.nPas) + '.txt') DO PrLogLocal WITH 'hover' + TRANSFORM(This.nPas) + ': pixel=' + RgbTxt(PixelEcran(This.Tag_X(), This.Tag_Y())) + ' BackColor=' + RgbTxt(loS.BackColor) + ' lHover=' + TRANSFORM(loS.lHover) IF This.nPas = 1 DO PrTest WITH 'hover: BackColor = 0,120,215', loS.BackColor = RGB(0,120,215), RgbTxt(loS.BackColor) ENDIF This.nTop0 = loS.Top This.nGrdH0 = loF.grdFacturi.Height goSpy.cRez = '' STRTOFILE('ok', gcSyncDir + 'hoverok' + TRANSFORM(This.nPas) + '.txt') CASE This.nPas = 1 AND FILE(gcSyncDir + 'done1.txt') DO PrLogLocal WITH 'tragere sus 60: Top ' + TRANSFORM(This.nTop0) + ' -> ' + TRANSFORM(loS.Top) + ' grdF.H ' + TRANSFORM(This.nGrdH0) + ' -> ' + TRANSFORM(loF.grdFacturi.Height) + ' | ' + goSpy.cRez DO PrTest WITH 'tragere sus 60 muta splitterul (+-5, pozitia = cursorul)', ABS(loS.Top - (This.nTop0 - 60)) <= 5, 'Top ' + TRANSFORM(This.nTop0) + '->' + TRANSFORM(loS.Top) DO PrTest WITH 'tragere sus: grila urmeaza splitterul', loF.grdFacturi.Height - This.nGrdH0 = loS.Top - This.nTop0, 'grdF.H ' + TRANSFORM(This.nGrdH0) + '->' + TRANSFORM(loF.grdFacturi.Height) This.ScrieCoord(2) This.nPas = 2 CASE This.nPas = 2 AND FILE(gcSyncDir + 'done2.txt') DO PrLogLocal WITH 'tragere jos 60: Top ' + TRANSFORM(This.nTop0) + ' -> ' + TRANSFORM(loS.Top) + ' | ' + goSpy.cRez DO PrTest WITH 'tragere jos 60 muta splitterul (+-5, pozitia = cursorul)', ABS(loS.Top - (This.nTop0 + 60)) <= 5, 'Top ' + TRANSFORM(This.nTop0) + '->' + TRANSFORM(loS.Top) This.ScrieCoord(3) This.nPas = 3 CASE This.nPas = 3 AND FILE(gcSyncDir + 'repausok3.txt') gnTopFinal = loS.Top This.Enabled = .F. loS = .NULL. loF = .NULL. goFrmT.Release() ENDCASE ENDPROC PROCEDURE ScrieCoord LPARAMETERS tnN LOCAL lcPt, loS loS = goFrmT.Sfsplitterv1 lcPt = BINTOC(loS.Left + 30, '4RS') + BINTOC(loS.Top + 2, '4RS') ClientToScreen(goFrmT.HWnd, @lcPt) This.Tag = TRANSFORM(CTOBIN(LEFT(lcPt, 4), '4RS')) + ',' + TRANSFORM(CTOBIN(SUBSTR(lcPt, 5, 4), '4RS')) DO PrLogLocal WITH 'coord' + TRANSFORM(tnN) + '=' + This.Tag + ' root sub punct=' + TRANSFORM(GetAncestor(WindowFromPoint(VAL(GETWORDNUM(This.Tag, 1, ',')), VAL(GETWORDNUM(This.Tag, 2, ','))), 2)) + ' rootform=' + TRANSFORM(GetAncestor(goFrmT.HWnd, 2)) STRTOFILE(This.Tag + ',' + TRANSFORM(GetAncestor(goFrmT.HWnd, 2)), gcSyncDir + 'coord' + TRANSFORM(tnN) + '.txt') ENDPROC PROCEDURE Tag_X RETURN VAL(GETWORDNUM(This.Tag, 1, ',')) ENDPROC PROCEDURE Tag_Y RETURN VAL(GETWORDNUM(This.Tag, 2, ',')) ENDPROC ENDDEFINE