目前分類:DELPHI程式語言 (29)

瀏覽方式: 標題列表 簡短摘要

程式範例

uses
     inifiles;

procedure TForm1.btn3Click(Sender: TObject);
var

文章標籤

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()


文章出處
http://rakelitica.blogspot.com/2012/07/using-lkjson-example-with-google-drive.html

JSON文件範本(可貼到 https://jsoneditoronline.org/#left=local.lapedo&right=local.vaxeha 幫你線上格式化JSON比較好看懂)

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

出處https://dotblogs.com.tw/jean/2013/11/06/126876

有些早期舊程式語言並沒有支援SFTP元件,可透過呼叫外部程式來達成


SFTP
使用WinSCP

SFTP使用WinSCP

WinSCP目前是免費的FTP軟體

1. WinSCP網站下載WinSCP.exe

http://winscp.net/eng/download.php

2.產生Ftp.bat檔,檔案內容如下:

winscp.exe /console /script="C:\winscp\winscp-script.txt"

3.產生winscp-script.txt檔,檔案內容如下:

option batch abort
option confirm off

文章標籤

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

感謝作者
出處:
http://idlemanhome.blogspot.com/2013/12/delphi-7indy-10.html

Delphi 7](2014.3.3改)Indy 10 網路元件安裝

舊的方法原本是以下這樣,後來我裝新的XP系統時發現無法成功

首先從 http://www.indyproject.org/downloads/10/indy10.0.52_source.zip 下載壓縮檔。
(或是到這個網頁找
http://www.indyproject.org/sockets/download/files/indy10.en.aspx )

Indy 10 安裝步驟:
移除舊版 Indy 9
  1. 進 Delphi 後,選擇 Component –> Install Packages…
  2. 在 Design Packages 找有 Indy 字樣的選項後,Remove 後離開。
  3. 在 Delphi 裡,選擇 Tools –> Environment Options,打開 Library 標籤,刪除有Indy 的路徑。
  4. 在系統資料夾找所有 Indy 開頭的 Indy*.bpl 和 Indy*.dcp 檔案,並刪除。
開始安裝:
  1. 解壓縮剛下載的 Indy10.0.52_source.zip 檔至 您放置 Lib 的目錄 (例:C:\Program Files (x86)\Borland\Delphi7\Source\Indy10),並將底下四個目錄加入 Delphi 內的 Library 路徑。
  2. 打開 \System\IndySystem70.dpk        ,Compile
  3. 打開 \Core\IndyCore70.dpk               ,Compile
  4. 打開 \Protocols\IndyProtocols70.dpk   ,Compile
  5. 打開 \SuperCore\IndySuperCore70.dpk,Compile
  6. 打開 \Core\dclIndyCore70.dpk            ,Install
  7. 打開 \Protocols\dclIndyProtocols70.dpk,Install
  8. 打開 \SuperCore\dclIndySuperCore70.dpk,Install

新的方式(成功率大幅提高)

http://indy.fulgan.com/ZIP/ 下載開發中的Indy10,(2014.3.3)今日的版本是 Indy10_5099.zip
(下載舊方法的連結 indy10.0.52_source.zip 應該也可以,但我沒試過)

開始進行安裝

先移除原安裝的 Indy (Delphi7之後好像都會自動裝Indy9,大致和舊方式相同,這邊再寫詳細一點):

  1. 進 Delphi 後,選擇上方功能選項 「Component」 –> 「Install Packages…」
  2. 在 「Design Packages」框框裡找有「Indy」字樣的選項,點選後按「Remove」移除(如有安裝過或Delphi7之後版本應該有1,2個)
  3. 全部移乾淨後,按 「OK」離開
  4. 再選擇上方功能選項「Tools」 –> 「Environment Options」,再點開「Library」標籤
  5. 在「Directories」框框裡,找「Library path」的最後面,點「…」按鈕
  6. 尋找列表內,有任何「Indy」字樣的路徑,點選後按「Delete」刪除掉
  7. 刪除完後,點選「OK」離開,關掉 Delphi
  8. 再從檔案總管中,搜尋「系統資料夾」(就是Windows目錄)內所有的Indy開頭的檔案,應該都會在 windows/system32 裡面

確定以上步驟都完成,或是您確定沒安裝任何版本的Indy ,就可以開始進行安裝

  1. 解壓縮剛下載的壓縮檔到你想參照的目錄位置,我是放在 C:\Program Files (x86)\Borland\Delphi7\Source\Indy10
  2. 進入 \Lib 目錄,找Fulld_7.bat,點選執行 (不同版本請自行變通,這步不做應該也可以,10.0.52版沒有這檔案,請自行嘗試)
  3. 點擊打開 \System\IndySystem70.dpk ,然後點 Compile
  4. 點擊打開 \Core\IndyCore70.dpk ,然後點 Compile
  5. 點擊打開 \Protocols\IndyProtocols70.dpk ,然後點 Compile
  6. 在 Delphi 上面功能列選擇「Component」 –> 「Install Packages…」 (用點擊檔案打開後Install的方式經常失敗)
  7. 點「Add…」按鈕,選擇 \Core\dclIndyCore70.dpk,然後「開啟舊檔」
  8. 再點「Add…」按鈕,選擇 \Protocols\dclIndyProtocols70.dpk,然後「開啟舊檔」
  9. P.S. 「SuperCore」可以完全忽視,不用安裝

我照這個步驟的成功率目前是百分百,提供給大家試試看

參照網址 http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

文章標籤

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

DELPHI 7 使用ADO元件寫入資料庫強制四捨五入小數到第四位問題

parameters.parambyname('tmpprice').datatype:=ftFloat;   <==寫入資料前先將欄位設定成 Float 型態即可解決此問題。

參考:http://jzinfo.javaeye.com/blog/432853

  1. var   
  2.     adoquery1:Tadoquery;   
  3. begin   
  4.     adoquery1:=Tadoquery.create(nil);   
  5.     try   
  6.        if not DM.adonconnection1.connected then   
  7.            DM.adoconnection1.connected:=true;   
  8.        adoquery1.connection:=DM.adoconnection1;   
  9.        adoquery1.enableBCD:=False;       //禁用bcd类型   
  10.        with adoquery1 do   
  11.        begin   
  12.            close;   
  13.            sql.clear;   
  14.            sql.add('insert into materialInfo values(:tmppno,:tmpvendor,:tmpdesc,:tmpprice)');   
  15.            parameters.parambyname('tmppno').value:=trim(edit1.text);   
  16.            parameters.parambyname('tmpvendor').value:=trim(edit2.text);   
  17.            parameters.parambyname('tmpdesc').value:=trim(edit3.text);   
  18.            parameters.parambyname('tmpprice').datatype:=ftFloat;       //设置下数据类型   
  19.            parameters.parambyname('tmpprice').value:=trim(edit4.text);   
  20.            execsql;   
  21.        end;   
  22.     finally   
  23.         adoquery1.free;   
  24.     end;   
  25. end; 

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

Delphi下使用function FileSetDate(Handle: Integer; Age: Integer): Integer; overload;函式修改檔案的”修改日期”:

參考:http://delphi.ktop.com.tw/board.php?cid=30&fid=70&tid=37667

procedure TForm1.Button1Click(Sender: TObject);
Var
    FileHandle : Integer;
    Str : String;
begin

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

最近在修改使用者提出 EXCEL 報表欄位,發現有幾支 procedure 轉出 EXCEL 的速度非常龜,而這幾支 procedure 是前輩所留下的產物,跟自己最近寫的轉 EXCEL 報表速度上差很多,以為是卡在SQL查詢,如果查詢條件KEY值給不齊全,有可能因為資料過多,查詢變很慢,但是測試後應該不是SQL查詢的問題,再對照前輩與自己的程式,感覺不出差異,最後看到 DELPHI 內設定EXCEL時前面通常會有一些基本設定,發現了這幾支程式都有設定列印範圍,姑且註解掉試試看,果然...............兇手就是它!

PageSetup.PrintArea := 'A:R';  //設定列印範圍

建議把它移到資料轉完後,最後在給上這個參數就好了。


NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

上網找到下面的程式碼,修了一下測試,真的可以耶!!!!最近的程式剛好有UTF8編碼的困擾,使用這方式轉是方便多了,不過還要測試會不會有問題。

討論區:http://delphi.ktop.com.tw/board.php?cid=30&fid=76&tid=89562

procedure TForm1.Button1Click(Sender: TObject);
var
  S:UTF8String;
  F:TextFile;
  TntEdit1: TStringList;

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

使用 TIdIPWatch 元件即可直接抓取執行程式的本機IP。

showmessage(IdIPWatch1.LocalIP);

會想要本基IP是想要讓自動更新程式自動判斷使用者電腦所在位置,因公司有很多據點,如果大家都回來抓更新檔,頻寬會.......


NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

讓Windows捲軸捲動時,資料內容同時跟著平滑捲動。

出處:

http://delphi.ktop.com.tw/board.php?cid=168&fid=918&tid=100386

http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=70761

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

網路上找到的文章,Ord('C') <==其實轉出來就是ASCII碼,知道後比較可以靈活運用在用變數的方式帶入。

 

文章出處:http://blog.yam.com/yqbagzdk/article/25791738

======================================================

最近碰到使用 SendMessage 和 PostMessage 機會超級多,無非是因為太多的程式合輯專案需求,如果耗費人力全部自行開發,大概請二、三倍的人力結果也只是為了完成幾個對於圖形處理的動作而已,建築.室內設計.服裝相關軟體因此購買已經寫好的軟體直接使用就行,但畢竟購買是購買,有些畫面或是需求畢竟是套裝軟體無法達成的,於是還是得自己寫控制指令

可以自己寫一個類似按鍵精靈的東東,也就是控制滑鼠自動在畫面上操作東西

滑鼠自動點擊的例子

procedure TForm1.Button1Click(Sender: TObject);

var x,y:integer;

begin

    x:= form1.Left+button2.Left+25;

    y:= top+button2.Top+27;

    SetCursorPos(x,y);   // 移到某個點

    Mouse_Event(MOUSEEVENTF_LEFTDOWN,X,Y,0,0); // 按下滑鼠左鍵

    Mouse_Event(MOUSEEVENTF_LEFTUP,X,Y,0,0);   // 放開左鍵

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

showmessage('fksj');

end;

*************************************

其中 mouse_event 這是 WindowsAPI 的指令,xyz軟體補給站

還有下列的幾種

MOUSEEVENTF_MOVE            = $0001; { mouse move }

MOUSEEVENTF_LEFTDOWN        = $0002; { left button down }

MOUSEEVENTF_LEFTUP          = $0004; { left button up }

MOUSEEVENTF_RIGHTDOWN       = $0008; { right button down }

MOUSEEVENTF_RIGHTUP         = $0010; { right button up }

MOUSEEVENTF_MIDDLEDOWN      = $0020; { middle button down }

MOUSEEVENTF_MIDDLEUP        = $0040; { middle button up }

MOUSEEVENTF_WHEEL           = $0800; { wheel button rolled }

MOUSEEVENTF_ABSOLUTE        = $8000; { absolute move }

而下面的這段則是模擬鍵盤

//Ctrl+C: 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); 
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0); 
keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0); 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) 
 
//Ctrl+V: 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); 
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0); 
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0); 
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0) 

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

GUID原本還看不懂,後來翻譯字面意思才知道它有獨一無二的意思,所以在程式裡面啥時候需要獨一無二碼的時候就很有用處啦!!!!

 

文章來源:http://blog.bestlong.idv.tw/2009/07/25/655

 

七月.25, 2009 in Delphi

GUID (Globally Unique IDentifier) 是一個 128-bit Integer (16 bytes) 的數值。

在 Delphi IDE 中可以按下 Ctrl + Shift + G 快捷鍵會出現類似下列的 GUID 值:

1

['{2F45BDFE-1BE4-404D-9C5B-4B481D6A7482}']

每次按下快捷鍵都會產生不同的 GUID 值。

 

 

而程式中產生 GUID 值的方式如下列程式碼:

procedure TForm1.FormCreate(Sender: TObject);
var
  s_GUID: string;
  t_GUID: TGUID;

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

官方網站
http://www.aew.wur.nl/UK/Delforexp/

大哥哥使用D7,安裝方式很簡單,下載完解壓縮後,執行SetupEx.exe,如果沒問題會出現訊息,告知在DELPHI裡的tools選項裡會多出第二個選單 Source Formatter,快速鍵為 ctrl + d ,只要開啟檔案,點選這個功能,就可以讓程式自動協助槽狀排序,對於拿到沒有良好習慣排序很亂的程式,相當有用喔^^

官網進去中間位置可以下載
1

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

存取 DB 時如果發現這個問題
可能就是 table 的欄位設的太小了
比如說要存個20個字元的字串
結果欄位大小只設了10個字元
就會有這樣的字串或二進位資料被截斷的問題產生

DELPHI下如果使用ADOQUERY元件,用陣列帶參數,陣列上的資料千萬不可相信,過長的資料在陣列內不會全顯示,容易造成 被截斷的問題,通常會配合 COPY 函式取固定字元,必免出錯。

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

ExportGrid4ToEXCEL(FileName, AGrid, True, True, False);
當FileName為中文時,打開生成的EXCEL文件,會在生成的EXCEL文件中彈出一個對話框,對話顯示內容為"重新命名無效的工作表名稱".

weiliu (2006-07-18 17:36:03)

可以先把中文文件名改成英文,用完了再改回來。

grayback (2006-07-18 17:38:00)

{  ExcelApp := CreateOleObject('Excel.Application');
   try
     WorkBook := ExcelApp.WorkBooks.Open(FileName);
     ExcelApp.Visible := False;

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

出處 http://blog.sina.com.cn/s/blog_4fd3c97201000cqm.html

標籤:IT/科技 cxgrid excel

cxGrid6.26導出到Excel
從原來使用cxGrid4系列開始,都是使用ExportGrid4ToExcel的辦法,可是使用了6系列後,發現這個辦法已經不行了,從Dev官方找了解決辦法。

use

cxGridExportLink;

procedure TMainForm.cxButton_MemoExcelClick(Sender: TObject);
begin

if SaveDialog1.Execute then
begin
ExportGridToExcel(SaveDialog1.FileName,cxGrid1,True,True,True);

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

Dev Express 是外掛的套件,須要另外安裝才會出現。

一、先將ADO連線、ADO Query 與 DataSource 等元件設定好。(這個每本書都會教到,所以不多說)

二、拉入 Dev Express 的 cxGrid 元件,點選 cxGrid1DBTableView1 後到左邊屬性設定DataSource。

1

三、建立 FormCreate 程序

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

這是今天寫程式遇到想要加入的複製功能,簡單好用!

http://blog.bestlong.idv.tw/2007/04/02/delphi-%E5%B0%87%E5%AD%97%E4%B8%B2%E8%A4%87%E8%A3%BD%E5%88%B0%E5%89%AA%E8%B2%BC%E7%B0%BF/

想要在Delphi程式中簡單的操作系統的剪貼簿,可以使用下列方法:

uses Clipbrd;
procedure TForm1.btnCopyClick(Sender: TObject);
begin
  Edit1.CopyToClipboard;//將 Edit1 的文字複製到剪貼簿

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

Access2003 設定密碼:

使用獨占模式開啟要設定密碼的資料庫

7

到 工具 => 安全性 => 設定密碼或取消密碼 設定密碼即可

8

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

原始sql指令可以查出我想要得資料

===================================

select * from table
where TempId like 'TpTrans%'
and FinalTime BETWEEN '2008/11/10 00:00' and '2008/11/13 00:00'
order by FinalTime desc

===================================

使用DELPHI來實現使用者輸入資料條件來查詢資料並輸出結果

===================================

//依序比對:   資料庫欄位    對應查詢變數        說明
//            Column01      Q_CustId.text       客戶代碼

NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()

1 2