全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1931
推到 Plurk!
推到 Facebook!

SetDefaultPrinter選擇設定印表機

缺席
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-03-28 13:55:37 IP:111.250.xxx.xxx 訂閱
這段程式已使用多年都沒問題
但是今天卻發現 這行指令法執行,沒有回應.程序停止.
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
可有解決方法.謝謝!
procedure SetDefaultPrinter1(NewDefPrinter: string);
var
ResStr: array[0..255] of Char;
begin
StrPCopy(ResStr, NewdefPrinter);
WriteProfileString('windows', 'device', ResStr);
StrCopy(ResStr, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
end;
編輯記錄
t27 重新編輯於 2014-03-28 13:58:45, 註解 無‧
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-03-28 15:25:34 IP:111.250.xxx.xxx 訂閱
用以下程式測試結果, 
可改變印表機設定, 但是
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
這行指令好像變成不歸路,無法執行下一行指令,
也就是說
SetDefaultPrinter(Combobox1.Text);指令執行後,程式就結束了.
以下指令無法執行
ShowMessage('Set Printer ok!');
不知問題何在?

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles,UrlMon, StdCtrls, Gauges, ComCtrls, ExtCtrls;
type
TfrmMain = class(TForm)
Panel1: TPanel;
OpenDialog1: TOpenDialog;
Label1: TLabel;
ComboBox1: TComboBox;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
uses
Printers;
function GetDefaultPrinter: string;
var
ResStr: array[0..255] of Char;
begin
GetProfileString('Windows', 'device', '', ResStr, 255);
Result := StrPas(ResStr);
end;
procedure SetDefaultPrinter(NewDefPrinter: string);
var
ResStr: array[0..255] of Char;
begin
StrPCopy(ResStr, NewdefPrinter);
WriteProfileString('windows', 'device', ResStr);
StrCopy(ResStr, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@ResStr));
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
//Fill the combobox with all available printers
Combobox1.Items.Clear;
Combobox1.Items.AddStrings(Printer.Printers);
// Get the Default Printer:
label1.Caption := Format('Default Printer: %s',[GetDefaultPrinter]);
end;
procedure TfrmMain.Button2Click(Sender: TObject);
begin
//Set the selected printer in the combobox as default printer
if Combobox1.Text <> '' then
begin
SetDefaultPrinter(Combobox1.Text);
ShowMessage('Set Printer ok!');
end
else
ShowMessage('Choose a Printer first !');
end;
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-03-28 16:27:43 IP:111.250.xxx.xxx 訂閱
已解決.
電腦重新整理就ok了.
alansunij
一般會員


發表:0
回覆:1
積分:0
註冊:2004-12-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-12-12 17:17:19 IP:220.130.xxx.xxx 訂閱
請問電腦重新整理是怎樣整理?, 我也遇到完全一樣的問題
系統時間:2018-01-21 13:03:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!