[ alex @ 19.08.2002. 18:01 ] @
Pozdrav svima,

Naidjoh danas na svojevrstan problem. Radi se o sledecem: Glavna aplikacija ima CListCtrl kontrolu, i ukoliko se selektuje vise items-a, program poziva dialog i propusta mu informacije o selektovanim item-ovima. Taj dijalog zatim za svaki item otvara HTML stranicu (php skript) u invisible IExplorer ActiveX objektu, stampa stranicu i otvara sledecu.

Tako bi bar trebalo da radi.. Medjutim, krajnji rezultat koji ja imam je da se prikaze i stampa samo poslednji item (odnosno poslednja HTML stranica).

Kod izgleda ovako:
Code:

for (j;j<arMax;j++) {
        pSet->FindRecord(idArray[j]);
        arguments.Format(_T("?oid=%d&pid=%s"), pSet->m_nOfferID, pSet->m_strPropertyID);
        oArguments.Format(_T("&a=%d&b=%d&c=%d&d=%d&e=%d&f=%d&g=%d&vf=%d"), m_nOptionA, m_nOptionB, m_nOptionC, m_nOptionD, m_nOptionE, m_nOptionF, m_nOptionG, m_nOptionVF);
        newurl = m_Url + arguments +oArguments;
        m_wndBrowser.Navigate(newurl, &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty);
        m_ProgressBar.StepIt();
}


Poziv za stampanje ide iz OnDocumentComplete hendlera za IExplorer kontrolu.

Code:

void CPrnmany::OnDocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT FAR* URL) 
{
    m_wndBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
}


Naizgled, sve bi trebalo da bude u redu. Medjutim, for petlja samo protrci kroz sve rekorde (itemse), i prikaze samo poslednju u IExplorer kontroli i onda je odstampa.

Ja bih zeleo nekako da uhvatim dogadjaj kada je stampa gotova i da cekam u for petlji (odmah posle Navigate) da se taj dogadjaj zavrsi pa da pustim dalje petlju.

Ima li neko nekakvu ideju? Ukoliko je potrebno dodatno pojasnjenje, javnite.

Poz, alex.
[ alex @ 19.08.2002. 18:02 ] @
Zaboravih, probao sam vec sa CreateEvent() da kreiram event i da cekam na isti (WaitForSingleObject() funkcija) ali mi program hang-uje cim se otvori dialog.
[ sspasic @ 20.08.2002. 11:15 ] @
Koliko se secam, metodi IE kontrole samo trigeruju odgovarajuce akcije u IE - kontrola se vraca programu odmah, a IE nastavlja da radi ono sto mu je receno (npr. Navigate).
Tebi se u stvari desava da Navigate iz druge iteracije 'prepise' onaj iz prve. Tj. na kraju petlje prikazana je samo zadnja stranica i jedino za nju IE stigne do DocumentComplete.

Probaj ovako:
U prvoj funkciji uradi Navigate samo za prvu stranicu, a u DocumentComplete Print, pa Navigate na sledecu stranicu i povecavanje brojaca.
E sad, tu postoji opasnost da Navigate za novustranicu cancel-uje print za predhodnu ali vredi probati.
Mozda pomogne i petlja izmedju Print i Navigate koja proverava IE.GetBusy().