顯示具有 Troubleshooting 標籤的文章。 顯示所有文章
顯示具有 Troubleshooting 標籤的文章。 顯示所有文章

2026年7月28日 星期二

No FTP list parsers have been registered

 

FTPListItems := idFTP.DirectoryListing,出現錯誤訊息


No FTP list parsers have been registered


只需要在程式的 uses 區段中加入 IdAllFTPListParsers 即可


2026年2月25日 星期三

修正 Quick Report 預覽/列印的顯示比例

 當調整了電腦螢幕的縮放比例後,操作程式裡的報表QuickReport,發現報表預覽的資料內容沒有隨著顯示縮放比跟著做調整,但不影響實際列印輸出的結果。



參考網上的作法,修正 QuickReport 需 QRPrntr.pas 排除縮放比的問題。

我採用網友提供的方法1來處理。

File Name : QRPrntr.pas

Procedure Name : CreateMetafileCanvas


QRPrntr.pas 修正後,重新編譯QR506RunDXE10.bpl,

預覽結果就會以符合系統縮放比做調整了。


【參考連結】

老森常譚 IT Help 《Delphi》修正 Quick Report 預覽列印的比例問題


2024年6月5日 星期三

Exception EInOutError in module xxx.exe at 0000854A. File access denied.

 


啟動程式遇到以上的錯誤訊息,資料夾必須開放存取權限,資料夾內的文件必須取消唯讀屬性。


2022年12月21日 星期三

程式在非中文語系的系統中操作中文檔名的文件,中文會變成亂碼 ?????...

程式在非中文語系的系統中操作中文檔名的文件,中文會變成亂碼 ?????... 

問題排除方式

Control Panel (控制台)


Region 


2022年11月29日 星期二

Access violation at address xxxxxxxx in module 'rtl70.bpl'. read of address xxxxxxxx

 



程式中使用到QuickReport物件,機器設備上必須先設定有印表機,如果是網路印表機,必須是已連線的狀態。


2022年8月2日 星期二

Excel Class Workbook 的 SaveAs 方法失敗

 



操作遠端連線在Terminal主機使用相同的程式,部份使用者在操作Excel匯出時會出現「Class Workbook 的 SaveAs 方法失敗」,需要將使用者的UserProfile刪除,重新登入後讓系統重建就可以正常匯出。

2022年6月15日 星期三

操作Printers.Printer.PrintIndex 無法變更 QuickReport PrintSetup裡的輸出印表機!?

Uses Printers;
...
Printers.Printer.PrintIndex := 1;  //指定輸出的印表機索引,不會變更預設印表機
...

TPrintDialog會依據PrintIndex的變更指向對應的印表機,
QuickReport PrintSetup沒有因為PrintIndex變更指定輸出的印表機,維持指向預設印表機。


修正QuickReport QRPrnSu.pas文件

Ver. QuickRep506 
File : QRPrnSu.pas
Proceure : GetPrinter

原內容

{ TQRBasePrintDialog }
// HERE the important changes - see dialogs.pas from delphi vcl - source.
// note the Brackets and type casts! It's tricky :-)

procedure TQRBasePrintDialog.GetPrinter(var DeviceMode, DeviceNames: THandle);
var
  DevNames: PDevNames;
  Offset: PChar;
  size : integer;
begin
  FPrinter.GetPrinter(Device, Driver, Port, DeviceMode);
  if DeviceMode <> 0 then
  begin
    size:=SizeOf(TDevNames) +
          (StrLen(Device) + StrLen(Driver) + StrLen(Port) + 3) *Sizeof(Char);
    //DeviceNames := GlobalAlloc(GHND,SizeOf(TDevNames) +
    //               (StrLen(Device) + StrLen(Driver) + StrLen(Port) + 3) *Sizeof(Char));
    //DevNames := PDevNames(GlobalLock(DeviceNames));
    GetMem(DevNames, Size);
    try
      Offset := PChar(PByte(DevNames) + SizeOf(TDevnames));
      with DevNames^ do
      begin
        wDriverOffset := NativeInt(Offset) - NativeInt(DevNames);
        Offset := StrECopy(Offset, Driver) + 1;
        wDeviceOffset := NativeInt(Offset) - NativeInt(DevNames);
        Offset := StrECopy(Offset, Device) + 1;
        wOutputOffset := NativeInt(Offset) - NativeInt(DevNames);;
        StrCopy(Offset, Port);
      end;
    finally
      //GlobalUnlock(DeviceNames);
      FreeMem(DevNames, Size);
    end;
  end;
end;


參考備註指定的 Dialogs.pas 修正

{ TQRBasePrintDialog }
// HERE the important changes - see dialogs.pas from delphi vcl - source.
// note the Brackets and type casts! It's tricky :-)

procedure TQRBasePrintDialog.GetPrinter(var DeviceMode, DeviceNames: THandle);
var
  DevNames: PDevNames;
  Offset: PChar;
  size : integer;
begin
  FPrinter.GetPrinter(Device, Driver, Port, DeviceMode);
  if DeviceMode <> 0 then
  begin
    //size:=SizeOf(TDevNames) +
    //      (StrLen(Device) + StrLen(Driver) + StrLen(Port) + 3) *Sizeof(Char);
    DeviceNames := GlobalAlloc(GHND, SizeOf(TDevNames) +
                   (StrLen(Device) + StrLen(Driver) + StrLen(Port) + 3) *Sizeof(Char));
    DevNames := PDevNames(GlobalLock(DeviceNames));
    //GetMem(DevNames, Size);
    try
      Offset := PChar(PByte(DevNames) + SizeOf(TDevnames));
      with DevNames^ do
      begin
        wDriverOffset := Offset - PChar(DevNames);
        Offset := StrECopy(Offset, Driver) + 1;
        wDeviceOffset := Offset - PChar(DevNames);
        Offset := StrECopy(Offset, Device) + 1;
        wOutputOffset := Offset - PChar(DevNames);;
        StrCopy(Offset, Port);
      end;
    finally
      GlobalUnlock(DeviceNames);
      //FreeMem(DevNames, Size);
    end;
  end;
end;

QRPrnSu.pas修正後儲存,重新編譯/安裝 QR506DesignDXE10.bpl、QR506RunDXE10.bpl



2022年4月19日 星期二

Delphi VFW 操作Web Cam影像輸出,出現黑屏的解決方式


VFW 操作Web Cam影像輸出,換了不同型號的Web Cam出現黑屏,原來是「視訊格式」不同造成。

Code:
    hCapWnd := THandle;

    hCapWnd := capCreateCaptureWindow('Cam. Window',WS_VISIBLE or WS_CHILD, 
      0, 0, Panel1.Width, Panel1.Height, Panel1.Handle, 0);

    capDriverConnect(hCapWnd, 0); 

    capDlgVideoFormat(hCapWnd); //會出現「視訊各式」的視窗




將「像素深度(位元)及壓縮」設置成 YUY2 即可

2022年4月12日 星期二

Excel 操作出現 "外部資料表不是預期的格式"

 




用程式操作開啟Excel文件,出現 "外部資料表不是預期的格式" 


或是用Excel開啟文件,出現檔案格式不相符的訊息



存檔時將文件格式指定為 "一般活頁簿",可以排除這類的狀況。

excel := CreateOleObject('Excel.Application');
excel.Visible := False;
excel.Workbooks.Add;
workbook := excel.Workbooks[1];
...
...
workbook.SaveAs(OleVariat(filename), -4143);



XlFileFormat 列舉 (Excel)

會指定儲存工作表時的檔案格式。

名稱描述副檔名
xlAddIn18Microsoft Excel 97-2003 增益集*.xla
xlAddIn818Microsoft Excel 97-2003 增益集*.xla
xlCSV6CSV*.csv
xlCSVMac22Macintosh CSV*.csv
xlCSVMSDOS24MSDOS CSV*.csv
xlCSVUTF862UTF8 CSV*.csv
xlCSVWindowsWindows CSV*.csv
xlCurrentPlatformText-4158目前平台文字*.txt
xlDBF27Dbase 2 格式*.dbf
xlDBF38Dbase 3 格式*.dbf
xlDBF411Dbase 4 格式*.dbf
xlDIF9資料交換格式*.dif
xlExcel1250Excel 二進位活頁簿*.xlsb
xlExcel216Excel 2.0 版 (1987)*.xls
xlExcel2FarEast7Excel 2.0 遠東版 (1987)*.xls
xlExcel329Excel 3.0 版 (1990)*.xls
xlExcel433Excel 4.0 版 (1992)*.xls
xlExcel4Workbook35Excel 4.0 版 活頁簿格式 (1992)*.xlw
xlExcel539Excel 5.0 版 (1994)*.xls
xlExcel739Excel 95 (7.0 版)*.xls
xlExcel856Excel 97-2003 活頁簿*.xls
xlExcel979543Excel 95 與 97 版*.xls
xlHtml44HTML 格式.htm;.html
xlIntlAddIn得到國際增益集沒有副檔名
xlIntlMacro0.25國際巨集沒有副檔名
xlOpenDocumentSpreadsheet60OpenDocument 試算表*.ods
xlOpenXMLAddIn55開啟 XML 增益集*.xlam
xlOpenXMLStrictWorkbook61 (&H3D)Strict Open XML 檔案*.xlsx
xlOpenXMLTemplate54開啟 XML 範本*.xltx
xlOpenXMLTemplateMacroEnabled53開啟 Open XML 範本巨集啟用*.xltm
xlOpenXMLWorkbook51開啟 XML 活頁簿*.xlsx
xlOpenXMLWorkbookMacroEnabled52開啟 XML 活頁簿巨集啟用*.xlsm
xlSYLK符號連結格式*.slk
xlTemplate17Excel 範本格式*.xlt
xlTemplate817範本 8*.xlt
xlTextMac19Macintosh 文字*.txt
xlTextMSDOS21MSDOS 文字*.txt
xlTextPrinter36印表機文字*.prn
xlTextWindowsWindows 文字*.txt
xlUnicodeText42Unicode 文字沒有副檔名;*.txt
xlWebArchive45Web 封存.mht;.mhtml
xlWJ2WD114日文 1-2-3*.wj2
xlWJ340日文 1-2-3*.wj3
xlWJ3FJ341日文 1-2-3 格式*.wj3
xlWK15Lotus 1-2-3 格式*.wk1
xlWK1ALLLotus 1-2-3 格式*.wk1
xlWK1FMT大約Lotus 1-2-3 格式*.wk1
xlWK315Lotus 1-2-3 格式*.wk3
xlWK3FM332Lotus 1-2-3 格式*.wk3
xlWK438Lotus 1-2-3 格式*.wk4
xlWKS4Lotus 1-2-3 格式*.wks
xlWorkbookDefault51預設活頁簿*.xlsx
xlWorkbookNormal-4143一般活頁簿*.xls
xlWorks2FarEastMicrosoft Works 2.0 遠東格式*.wks
xlWQ134Quattro Pro 格式*.wq1
xlXMLSpreadsheet46XML 試算表*.xml


2021年9月12日 星期日

Try..Except..End 例外狀況處理

Try
  ...
  ...
Except
  ...
End;


Exception

Try
  ...
  ...
Except
   on E:Exception do
  begin
    MessageBox(Handle, PWideChar(E.Message), PWideChar(E.ClassName), MB_ICONError);
  end
End;

2021年9月1日 星期三

截取 ADO 錯誤訊息

 procedure ADOConnection1ExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer;
  const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset);
begin
  //ADO 錯誤訊息
  if EventStatus=esErrorsOccured then
  begin
    ShowMessage(Error.Description);
  end;
end;

2020年6月30日 星期二

Delphi 執行檔,程式碼執行無法繼續,因為找不到Borlndmm.dll。...

Delphi 獨立執行檔(Exe),啟動後出現錯誤訊息
"程式碼執行無法繼續,因為找不到borlndmm.dll。重新安裝程式或許可以修正此問題。"


與 uese ShareMem有關