Q&A

  • [재질문826번]프로그램 도중 기본 프린트를 ...
안녕하세요.

별다른 것은 없고요 현재 설정된 기본 프린트를 바꿀려하는데 바꿔도

이전설정된 프린트장치에서 프린트됩니다. 간단히 루틴은 다음과 같습니다.



if PrinterSetupDlg.Execute = True then

begin

try

MsWord := CreateOleObject('Word.Basic');

except

ShowMessage('MS-Word를 시작할수 없습니다.');

end;

MSWord.FileOpen(GFileName);

MSWord.FilePrint;

MSWord.FileExit;

end;



원인을 알려 주시면 감사하겠습니다.



2  COMMENTS
  • Profile
    이정욱 1999.04.29 21:53
    제가 만든 기본프린터 바꾸는 함수 입니다.

    참고하시구요... 이것은 프린터 이름의 일부만 넣어줘도 됩니다.



    procedure TMainForm.SetDPrinter(PrnStr : String);

    var

    WinIni : TIniFile;

    WinIniFileName : array[0..MAX_PATH] of char;

    s : array[0..64] of char;

    i : integer;

    pDevice : array[0..31] of Char;

    pDevice2 : array[0..31] of Char;

    pDriver : array[0..259] of Char;

    pPort : array[0..259] of Char;

    DeviceMode : THandle;



    begin

    //프린터를 세팅하는 함수.

    for i := 0 to Printer.Printers.Count - 1 do

    If Pos(PrnStr,Printer.Printers[i]) > 0 then Break;



    If (Printer.Printers.Count - 1 < i) then

    begin

    ShowMessage('프린터이름이 없습니다.');

    Exit;

    end;

    If (Printer.PrinterIndex <> i) then

    begin

    printer.PrinterIndex := -1;

    Devicemode:=0;

    printer.getprinter(pdevice2,pDriver,pPort,DeviceMode);



    Printer.PrinterIndex := i;

    Devicemode:=0;

    printer.getprinter(pdevice,pDriver,pPort,DeviceMode);



    If StrPas(pDevice) <> StrPas(pDevice2) then

    begin

    GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));

    StrCat(WinIniFileName, 'win.ini');

    WinIni := TIniFile.Create(WinIniFileName);

    try

    WinIni.WriteString('windows',

    'device',

    StrPas(pdevice)+','+StrPas(pDriver)+','+StrPas(pPort));

    finally

    WinIni.Free;

    end; //Try



    StrCopy(S, 'windows');

    SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));

    Application.ProcessMessages;

    Delay(1000);

    end;

    end;

    end;





    이호선 wrote:

    > 안녕하세요.

    > 별다른 것은 없고요 현재 설정된 기본 프린트를 바꿀려하는데 바꿔도

    > 이전설정된 프린트장치에서 프린트됩니다. 간단히 루틴은 다음과 같습니다.

    >

    > if PrinterSetupDlg.Execute = True then

    > begin

    > try

    > MsWord := CreateOleObject('Word.Basic');

    > except

    > ShowMessage('MS-Word를 시작할수 없습니다.');

    > end;

    > MSWord.FileOpen(GFileName);

    > MSWord.FilePrint;

    > MSWord.FileExit;

    > end;

    >

    > 원인을 알려 주시면 감사하겠습니다.

    >





  • Profile
    안치봉 1999.04.29 07:10
    이호선 wrote:

    > 안녕하세요.

    > 별다른 것은 없고요 현재 설정된 기본 프린트를 바꿀려하는데 바꿔도

    > 이전설정된 프린트장치에서 프린트됩니다. 간단히 루틴은 다음과 같습니다.

    >

    > if PrinterSetupDlg.Execute = True then

    > begin

    > try

    > MsWord := CreateOleObject('Word.Basic');

    > except

    > ShowMessage('MS-Word를 시작할수 없습니다.');

    > end;

    > MSWord.FileOpen(GFileName);

    > MSWord.FilePrint;

    > MSWord.FileExit;

    > end;

    >

    > 원인을 알려 주시면 감사하겠습니다.

    >



    안녕하세요.



    위소스를 보니... ole 객체자체에서 지원하는 프린트루틴을 사용하는군요..

    그렇다면 아마도 위소스처럼 기본프린터를 변경시켜도 그 내용이 적용되지 않을 가능성이 많습니다. - 참고로 프로그램에서 기본프린터를 바꾸어도 그 프로그램이 종료되면 원래의 값으로 프린터가 설정됩니다.



    확실한건 아닙니다. -.-;;