[ dusty @ 10.03.2005. 12:31 ] @
Pozdrav narode, treba da stampam na matricnom stampacu, ali ne mogu nikako da podesim velicinu stranice - stampac je zakucao na njegov default za A4.
Trazio sam po netu, nasao sam samo jedan tekst da je to jos jedan od bagova .Net-a i da se moze preko API-ja zaobici.

Da li zna neko kako bi se to moglo uraditi bez poziva API-ja ?
[ miodrag77 @ 10.03.2005. 13:33 ] @
>
samo sve smest u crystal u gornji levi ugao i to sljaka. Ja sam tako
napravio prog koji stampa recepte za lekove
[ dusty @ 10.03.2005. 13:54 ] @
Hvala ti miodrag77, ali to nije to. Izvini, nisam bio precizniji o cemu se radi, moja glupost :(

Stampanje radim preko klase PrintDocument.

Promena velicine stranice:
Code:

public void SetPaperSize(string name, float width_in_CM, float height_in_CM, bool bLandscape)
        {            
        if(name == null) name = "default";        

        m_prnDoc.DefaultPageSettings.Landscape = bLandscape;
        m_prnDoc.DefaultPageSettings.PaperSize = new PaperSize("List",
                (int)(width_in_CM * 39.37f),
                (int)(height_in_CM * 39.37f));
        }


Kontam da treba da se napravi novi PaperSize i da se taj novi format ubaci u kolekciju PaperSizes od PrinterSettings-a, ali su svi property-i read-only.

Kada podesim rezoluciju stampanja DefaultPageSettings-a, to radi, ali ne i sa velicinom stranice.

Any ideas ?
[ Sasa Popovic @ 14.03.2005. 15:40 ] @
Pozdrav dusty,

Imam isti problem kao i ti a evo sta sam do sada uradio:

1. hvatam QueryPageSettings event PrintDocument klase. Ovaj event se desi svaki put pre nego sto se zapocne stampa i mislim da je to mesto na kom treba podesiti sve sto je potrebno stampacu.
2. postavim papersize na odgovarajuci format:
Code:

        private void printDocument_QueryPageSettings(object sender, QueryPageSettingsEventArgs e) {
            e.PageSettings.PaperSize = new PaperSize(PaperKind.Custom.ToString(), 700, 300);
        }


Nakon sto se izvrsi ovaj kod, paper size je stvarno podesen na odgovarajucu velicinu ali stampa i dalje stampa isto kao i ranije A4 format.

Jesi li mozda uspeo da uradis nesto vise?
Da li mozda imas resenje koriscenjem API poziva?
[ dusty @ 24.03.2005. 08:47 ] @
Zadnja dva-tri dana se zezam sa ovim i nista nisam uradio :(
Poslednji ocajnicki pokusaj je bio da pokupim DevMode strukturu perko metode GetHDevMode i kada podesim papir da je vratim sa SetHDevMode. I naravno nista.

Code:

IntPtr hDevMode = m_prnDoc.PrinterSettings.GetHdevmode();
IntPtr pDevMode = Win32.GlobalLock(hDevMode);

Debug.WriteLine((string)Marshal.PtrToStringUni(pDevMode));
Debug.WriteLine("Length " + ((int)Marshal.ReadInt16((IntPtr)((int)pDevMode + 0x50))).ToString());
Debug.WriteLine("Height " + ((int)Marshal.ReadInt16((IntPtr)((int)pDevMode + 0x52))).ToString());

Marshal.WriteInt16(pDevMode, 0x50, Convert.ToInt16(height_in_CM * 100));
Marshal.WriteInt16(pDevMode, 0x52, Convert.ToInt16(width_in_CM * 100));            
m_prnDoc.PrinterSettings.SetHdevmode(hDevMode);
Debug.WriteLine("GlobalUnlock unlocked: " + Win32.GlobalUnlock(hDevMode).ToString());


Kontam da su idijoti iz Microsoft-a zaj@bali bas na SetHDevMode metodi. Ostaje jedino da napravim .dll u C-u koji ce da odradi stampu :(

Ovo stvarno nema smisla sta kretenski MS radi celom svetu :(