Copy DevMode

Win32 api funkcije.
Odgovori
odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Copy DevMode

Odgovor Napisal/-a odisej » 14.08.2013 09:40:50

Za printer znam poklicat dialog printer properties takole:

Koda: Izberi vse

  FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);

  if OpenPrinter(FDevice, hPrinter, nil) then
  begin
    //dwSpaceNeeded := DocumentProperties(0, hPrinter, FDevice, nil, nil, 0);

      FDevMode := GlobalLock(DeviceMode);
      try
        res := DocumentProperties(0, hPrinter, FDevice, FDevMode^, FDevMode^, DM_IN_BUFFER + DM_IN_PROMPT + DM_OUT_BUFFER);

        if res = IDOK then
        begin      
        end;
      finally
        GlobalUnlock(DeviceMode);
      end;

    ClosePrinter(hPrinter);
  end;
Problem pa je, ker imam več TPrinter objektov oz. ko kličem tale dialog, je drug TPrinter objekt, kot potem tisti, s katerim zares printam. Zdej bi rad lastnosti, ki sem jih nastavil na prvem TPrinter objektu, prenesel na drug TPrinter objekt, pa mi nekej ne gre. Ima kdo delujočo kodo?

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Re: Copy DevMode

Odgovor Napisal/-a Miha-R » 14.08.2013 10:30:04

Tole sem poguglal, mogoče ti bo pomagalo:

http://stackoverflow.com/questions/6890 ... nspool-api
http://www.experts-exchange.com/Program ... 49874.html

V glavnem, uporabiš SetPrinter za nastavitev lastnosti, iz enega v drugega boš moral verjetno prekopirati pa kar ročno vse elemente recorda _devicemodeA (pDevMode^).
Vedno sem želel napisati prav tak odgovor.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Re: Copy DevMode

Odgovor Napisal/-a odisej » 14.08.2013 12:50:52

Zadevo sem želel narediti z DocumentProperties, ker se mi svita, da bi z zadnjim parametrom DM_IN_BUFFER + DM_OUT_BUFFER to moglo iti. Nekej mi nagaja in sem ubral neko alternativo.

Koda: Izberi vse

    OpenPrinter(FDeviceSrc, hPrinterSrc, nil);
    dwSpaceNeeded := DocumentProperties(0, hPrinterSrc, FDeviceSrc, nil, nil, 0);
    ClosePrinter(hPrinterSrc);

    FDevMode := GlobalLock(DeviceMode);
    try
      CopyMemory(FDevMode, Src.FDevMode, dwSpaceNeeded);
    finally
      GlobalUnlock(DeviceMode);
      //FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
    end;
Uni SetPrinter, kokr sem prebral nek odgovor Petra Belowa ni potreben?

PS: Kako to, da si na tem forumu spet bolj aktiven? Ali nisi že nekaj časa nazaj rekel, da se premikaš na C# in .NET.

Miha-R
Prispevkov: 2155
Pridružen: 14.05.2001 21:29:53

Re: Copy DevMode

Odgovor Napisal/-a Miha-R » 14.08.2013 13:19:58

Uni SetPrinter, kokr sem prebral nek odgovor Petra Belowa ni potreben?
Eee, ne vem, če je treba klicati ali ne.
PS: Kako to, da si na tem forumu spet bolj aktiven? Ali nisi že nekaj časa nazaj rekel, da se premikaš na C# in .NET.
Jaz že ne, si od koga drugega slišal kaj takega :)
Vedno sem želel napisati prav tak odgovor.

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Re: Copy DevMode

Odgovor Napisal/-a odisej » 17.08.2013 08:39:42

Mogoče sm te pa res zamenjal. Mogoče z aovenom.

Odgovori