星期一, 12月 31, 2007

SaveDioalog覆蓋檔案要注意到的事

檔執行開啟視窗後,有時候你用點擊的方式去想要覆蓋檔案,又或者是你想要自己打檔名而在檔名自己有加副檔名了,為了避免又多了一個副檔名,你可以用以下的方式,先將所有副檔名清除掉,然後再自己手動加上副檔名。
首先新增一個SaveDialog,並在filter設定好,及FileName可以預設一下檔案名稱
然後在按鈕事件下加入以下程式碼:

procedure TFmain.Button1Click(Sender: TObject);
var
MsgRlt : integer;
sFileName, sExeName : string;
begin
if Savedialog1.Execute then
begin
sFileName := SaveDialog1.FileName;

sExeName :=ExtractFileExt(sFileName);
if (StrIComp(PChar(sExeName),'.exe' ) =0 ) then //有的話要清掉
begin
sFileName := DeleteFileExt(sFileName); // 匯出記錄程序
end;
sFileName := sFileName+ '.exe'; //最後再加上去


//showmessage(sFileName);
if (FileExists(sFileName)) then //會自動再加exe判斷
begin
//showmessage(SaveDialog1.FileName);
MsgRlt:=MessageBox(SaveDialog1.Handle,'檔案已存在,是否覆蓋?','MessageBox',MB_YESNO);

end;
if MsgRlt=IDNO then
begin
Button1.Click;
exit;
end;
end;
end;

星期二, 12月 25, 2007

新增一個圖片式的進度列

有ProgressBar、Gauge、LMDProgressFill及cxProgressBar元件可用,其中若要有底圖可用LMDProgressFill,並在屬性FillObject用Bitmap的方式,並記得TileMode改為tmStretch

procedure TForm1.WebBrowser1ProgressChange(ASender: TObject; Progress,
ProgressMax: Integer);
begin
Gauge1.MaxValue :=ProgressMax;
Gauge1.Progress:=progress;

LMDProgressFill1.MaxValue :=ProgressMax;
LMDProgressFill1.UserValue := PROGRESS;

cxProgressBar1.Properties.Max:= ProgressMax;
cxProgressBar1.position:=progress;
end;

星期五, 12月 21, 2007

能使得視窗form半透明效果


procedure TForm1.FormCreate(Sender: TObject);
var l:longint;
begin
l:=getWindowLong(Handle, GWL_EXSTYLE);
l := l Or WS_EX_LAYERED;
SetWindowLong (handle, GWL_EXSTYLE, l);
SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA);
end

星期四, 12月 20, 2007

TLabel內的文字要在其寬度的中間顯示,要如何做呢

在TLabel屬性設置:
Alignment := taCenter;
Autosize := false;

星期一, 12月 17, 2007

要如何在memo1中對齊文字

首先你要將memo1的字型設成"細明體" or "Courier New" or "Fixedsys"
然後用Format的方式去%s設定字串格式即可

星期五, 12月 14, 2007

上下兩個panel要同樣高度時(在放大也一樣)

上下兩個panel初始高度在介面設成一樣,上面的panel1為altop,下面為alclient,然後在form的Resize事件加入下面程式碼即可。

procedure TForm1.FormResize(Sender: TObject);
begin
panel1.Height := form1.clientheight div 2;
end;

星期四, 12月 13, 2007

動態為所有TLabel加Caption上去

這個功能主要是給,你一次有太多的TLabel要用for迴圈給值,但是你又不想用動能新增的方式,因為每個位置如果都差異很大,還要一個一個給,所以你就可以用讀入form內所有的物件,在此我又針對爸爸在在Tabsheet1才去判斷。


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo, ComCtrls;

const
lb : array [1..4, 1..2] of string = (('Label1', '3'), ('Label2', '29'), ('Label3', '63'), ('Label4', '35'));

type
TForm1 = class(TForm)
Button1: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i,j : integer;
sStr : string;
proInfo : PPropInfo;
begin
j:=1;

for i:=0 to Componentcount-1 do
begin
if TControl(Components[i]).Parent = TabSheet1 then //找他爸
begin
proInfo := GetPropInfo(Components[i].ClassInfo, 'Caption'); //得到有Caption的物件
if (proInfo <> nil) then
begin
if Components[i].name = lb[j][1] then
begin
sStr := inttostr(j);
SetStrProp(Components[i], proInfo, sStr);
j:=j+1;
end;
end;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

showmessage(inttostr(TabSheet1.ComponentCount));
end;

end.

星期一, 12月 03, 2007

幫執行檔(exe)加上一些資訊

Project->Options->Version Info
勾選 Include version information in project
然後看要加什麼在執行檔的資訊:

檔案版本 Module version number
說明 FileDescription
著作權 LegalCopyright

內部名稱 InternalName
公司名稱 Company Name
合法商標 LegalTrademarks
原始檔名 OriginalFilename
產品名稱 ProductName
產品版本 ProductVersion
語系 Language
說明 Comments