Delphi KTop 終於復站了
可以算是台灣 Delphi 領域的大事
在 Windows 環境下
// Use this code to write directly to the COM1 serial port
// First, you want to set the mode of the port. You need to set
// it only once; it will remain the same until you reboot.
// Note: the backticks on the following line will execute the
// DOS ‘mode’ command from within PHP
`mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;
$fp = fopen (“COM1:”, “w+”);
if (!$fp) {
echo “Uh-oh. Port not opened.”;
} else {
$e = chr(27);
$string = $e . “A” . $e . “H300”;
$string .= $e . “V100” . $e . “XL1SATO”;
$string .= $e . “Q1” . $e . “Z”;
echo $string;
fputs ($fp, $string );
fclose ($fp);
}
?>
有機會測試看看。
方法一:
$downloadfile=”somefile.txt”;
header(“Content-disposition: attachment; filename=$downloadfile”);
header(“Content-Type: application/force-download”);
方法二:
當程式檔案大小感覺有些大時,開始考慮分割程式,在網路上蒐集相關資料。
在 DLL 中如何共用一個全域變數,例如使用者登入後的使用者帳號(UserName)
把要共享的全域變數放在主程式裡,如 UserName,UserID,…等等
在主程式中寫兩個函數
Function GetCurUserName():PChar;
begin
Result := PChar(UserName);
end;
Function SetCurUserName(AUserName:PChar);
begin
UserName := AUserName;
end;
然後在專案檔 (.dpr) 裡輸出這兩個函數寫
…
{$R *.res}
Exports
GetCurUserName, SetCurUserName;
…
這樣在每個 DLL 裡就可以使用這兩個函數了
function GetCurUserName: PChar;
var
fGetCurUserName: function: PChar;
begin
@fGetCurUserName := GetProcAddress(GetModuleHandle(PChar(Application.ExeName)), ‘GetCurUserName’);
if Assigned(fGetCurUserName) then
begin
Result := fGetCurUserName
else
Result := ‘Admin’;
end;
使用 ADO 做資料庫連接,在 MainForm 上放置兩個 TADOConnection 各自連接 MS SQL 2000 與 MS Access 2000 兩個資料庫。
原本相安無事,但隨著程式碼的累積,忽然間,連接 Access 的 TADOConnection 居然一直造成錯誤。
出現的錯誤對話框顯示著 OLE error 80030002 訊息。
在網路上找到此篇
INFO: Translating Automation Errors for VB/VBA (Long)
其中有列出
-2147287038 (80030002) %1 could not be found.
因為要開啟的檔案不存在所以找不到,所以是參數的問題。
只好重新追蹤看看,花了將近ㄧ個下午的時間終於找到原因。居然是因為使用了 FileListBox1 元件的問題。就是因為下列幾行指令的影響
procedure TfmMain.FormCreate(Sender: TObject);
(省略)
gs_AppPath := AddSlash(ExtractFilePath(Application.ExeName));
gs_DownLoadPath := AddSlash(gs_AppPath + ‘download’);
FileListBox1.Directory := gs_DownLoadPath; // 因為加了此行造成錯誤
(省略)
end;
執行 FileListBox1.Directory := gs_DownLoadPath; 後會導致程式執行時的工作目錄也改變成 gs_DownLoadPath 的內容。所以之後的程式碼若是有使用相對路徑的方式就有可能會導致路徑錯誤。
也剛好讀取 Access 的 TADOConnection 的 ConnectionString 屬性就是使用相對路徑的方式,來連接應用程式相同目錄下的 DB.UDL 資料連接設定檔。因為是在工作目錄的變動後才連線所以造成錯誤。