程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi基礎開發技巧(2)

Delphi基礎開發技巧(2)

編輯:Delphi
◇[Delphi]MEMO的自動翻頁 .. 
Procedure ScrollMemo(Memo : TMemo; Direction : char); 
begin 
case direction of 
''''d'''': begin 
SendMessage(Memo.Handle, { HWND of the Memo Control } 
WM_VSCROLL, { Windows Message } 
SB_PAGEDOWN, { Scroll Command } 
0) { Not Used } 
end; 
''''u'''' : begin 
SendMessage(Memo.Handle, { HWND of the Memo Control } 
WM_VSCROLL, { Windows Message } 
SB_PAGEUP, { Scroll Command } 
0); { Not Used } 
end; 
end; 
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
ScrollMemo(Memo1,''''d''''); //上翻頁
end; 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
ScrollMemo(Memo1,''''u''''); //下翻頁
end; 
◇[Delphi]DBGrid中回車到下個位置(Tab鍵)
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
if DBGrid1.Columns.Grid.SelectedIndex < DBGrid1.Columns.Count - 1 then
DBGrid1.Columns[DBGrid1.Columns.grid.SelectedIndex 1].FIEld.FocusControl
else
begin 
Table1.next;
DBGrid1.Columns[0].fIEld.FocusControl; 版權申明:本站文章均來自網絡,本站所有轉載文章言論不代表本站觀點 
end;
end;
◇[Delphi]如何安裝控件
安裝方法:
1.對於單個控件,Component-->install component..-->PAS或DCU文件-->install
2.對於帶*.dpk文件的控件包,File-->open(下拉列表框中選*.dpk)-->install即可.
3.對於帶*.dpl文件的控件包,Install Packages-->Add-->dpl文件名即可。
4.如果以上Install按鈕為失效的話,試試Compile按鈕。
5.是run time lib則在option下的packages下的runtimepackes加之.
如果編譯時提示文件找不到的話,一般是控件的安裝目錄不在Delphi的Lib目錄中,有兩種方法可以解決:
1.把安裝的原文件拷入到Delphi的Lib目錄下。
2.或者Tools-->Environment Options中把控件原代碼路徑加入到Delphi的Lib目錄中即可。
◇[Delphi]目錄完全刪除(deltree)
procedure TForm1.DeleteDirectory(strDir:String); 
var 
sr: TSearchRec; 
FileAttrs: Integer; 
strfilename:string; 
strPth:string; 
begin 
strpth:=Getcurrentdir(); 
FileAttrs := faAnyFile; 
if FindFirst(strpth ''''\'''' strdir ''''\*.*'''', FileAttrs, sr) = 0 then 
begin 
if (sr.Attr and FileAttrs) = sr.Attr then .. 
begin 
strfilename:=sr.Name; 
if fileexists(strpth ''''\'''' strdir ''''\'''' strfilename) then 
deletefile(strpth ''''\'''' strdir ''''\'''' strfilename); 
end; 
while FindNext(sr) = 0 do 
begin 
if (sr.Attr and FileAttrs) = sr.Attr then 
begin 
strfilename:=sr.name; 
if fileexists(strpth ''''\'''' strdir ''''\'''' strfilename) then 
deletefile(strpth ''''\'''' strdir ''''\'''' strfilename); 
end; 
end; 
FindClose(sr); 
removedir(strpth ''''\'''' strdir); 
end; 
end;
◇[Delphi]取得TMemo 控件當前光標的行和列信息到Tpoint中 
1.function ReadCursorPos(SourceMemo: TMemo): TPoint; 
var Point: TPoint; 
begin 
 point.y := SendMessage(SourceMemo.Handle,EM_LINEFROMCHAR,SourceMemo.SelStart,0);
 point.x := SourceMemo.SelStart-SendMessage(SourceMemo.Handle,EM_LINEINDEX,point.y,0); 
 Result := Point;
end; 
2.LineLength:=SendMessage(memol.handle,EM-LINELENGTH,Cpos,0);//行長

◇[Delphi]讀硬盤序列號 
function GetDiskSerial(DiskChar: Char): string;
var
SerialNum : pdWord;
a, b : dWord;
Buffer : array [0..255] of char;
begin
result := "";
if GetVolumeInformation(PChar(diskchar ":\"), Buffer, SizeOf(Buffer), SerialNum,
a, b, nil, 0) then
 Result := IntToStr(SerialNum^);
end;
◇[INTERNET]CSS常用綜合技巧
1。P:first-letter { font-size: 300%; float: left }//首字會比普通字體加大三倍。
2。//連接一個外部樣式表
3。嵌入一個樣式表

DIV可以包含段落、標題、表格甚至其它部分 ..


5。CLASS屬性

//定義見3。
6。ID屬性

版權申明:本站文章均來自網絡.

//定義見3。
7。屬性列表
字體風格:font-style: [normal | italic | oblique];
字體大小:font-size: [xx-small | x-small | small | medium | large | x-large | xx-large | larger | smaller | <長度> | <百分比>]
文本修飾:text-decoration:[ underline || overline || line-through || blink ]
文本轉換:text-transform:[none | capitalize | uppercase | lowercase]
背景顏色:background-color:[<顏色> | transparent]
背景圖象:background-image:[ | none]
行高:line-height: [normal | <數字> | <長度> | <百分比>]
邊框樣式:border-style: [ none | dotted | dashed | solid | double | groove | ridge | inset | outset ]
漂浮:float: [left | right | none]
8。長度單位
相對單位:
em (em,元素的字體的高度) 
ex (x-height,字母 "x" 的高度) 
px (像素,相對於屏幕的分辨率) 
絕對長度:
in (英寸,1英寸=2.54厘米) 
cm (厘米,1厘米=10毫米) 
mm (米) 
pt (點,1點=1/72英寸) 
pc (帕,1帕=12點) 
◇[Delphi]VCL制作簡要步驟
1.創建部件屬性方法事件
(建立庫單元,繼承為新的類型,添加屬性、方法、事件,注冊部件,建立包文件)  
2.消息處理
3.異常處理
4.部件可視
◇[Delphi]動態連接庫的裝載
靜態裝載:procedure name;external ''''lib.dll'''';
動態裝載:var handle:Thandle;
handle:=loadlibrary(''''lib.dll'''');
if handle<>0 then
begin
{DOSomething}
freelibrary(handle);
end;
◇[Delphi]指針變量和地址
var x,y:integer;p:^integer;//指向INTEGER變量的指針
x:=10;//變量賦值
p:=@x;//變量x的地址
y:=p^;//為Y賦值指針P
@@procedure//返回過程變量的內存地址
◇[Delphi]判斷字符是漢字的一個字符
ByteType(''''你好haha嗎'''',1) = mbLeadByte//是第一個字符
ByteType(''''你好haha嗎'''',2) = mbTrailByte//是第二個字符
ByteType(''''你好haha嗎'''',5) = mbSingleByte//不是中文字符
◇[Delphi]memo的定位操作
memo1.lines.delete(0)//刪除第1行
memo1.selstart:=10//定位10字節處
◇[Delphi]獲得雙字節字符內碼
function getit(s: string): integer;
begin
Result := byte(s[1]) * $100 byte(s[2]);
end;
使用:getit(''''計'''')//$bcc6 即十進制 48326
◇[Delphi]調用ADD數據存儲過程
存儲過程如下: . 
create procedure addrecord(
record1 varchar(10)
record2 varchar(20)
)
as
begin
insert into tablename (field1,fIEld2) values(:record1,:record2)
end
執行存儲過程:
EXECUTE procedure addrecord("urrecord1","urrecord2") 
◇[Delphi]將文件存到blob字段中
function blobcontenttostring(const filename: string):string;
begin
with tfilestream.create(filename,fmopenread) do
try
setlength(Result,size);
read(Pointer(Result)^,size);
finally
free;
end;
end;
//保存字段
begin
if (opendialog1.execute) then
begin
sFileName:=OpenDialog1.FileName;
adotable1.edit;
adotable1.fIEldbyname(''''visio'''').asstring:=Blobcontenttostring(FileName);
adotable1.post;
end;
◇[Delphi]把文件全部復制到剪貼板
uses shlobj,activex,clipbrd;
procedure Tform1.copytoclipbrd(var FileName:string);
var
FE:TFormatEtc;
Medium: TStgMedium;
dropfiles:PDropFiles;
pFile:PChar;
begin
FE.cfFormat := CF_HDROP;
FE.dwAspect := DVASPECT_CONTENT;
FE.tymed := TYMED_HGLOBAL; . 
Medium.hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_ZEROINIT, SizeOf(TDropFiles) length(FileName) 1);
if Medium.hGlobal<>0 then begin
Medium.tymed := TYMED_HGLOBAL;
dropfiles := GlobalLock(Medium.hGlobal);
try
dropfiles^.pfiles := SizeOf(TDropFiles);
dropfiles^.fwide := False;
longint(pFile) := longint(dropfiles) SizeOf(TDropFiles);
StrPCopy(pFile,FileName);
Inc(pFile, Length(FileName) 1);
pFile^ := #0;
finally
GlobalUnlock(Medium.hGlobal);
end;
Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal);
end;
end;
◇[Delphi]列舉當前系統運行進程
uses TLHelp32;
procedure TForm1.Button1Click(Sender: TObject);
var lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
ListBox1.Items.Add(StrPas(lppe.szExeFile));
found := Process32Next(Hand,lppe);
end;
end;
◇[Delphi]根據BDETable1建立新表Table2
Table2:=TTable.Create(nil); . 
try
Table2.DatabaseName:=Table1.DatabaseName;
Table2.FieldDefs.Assign(Table1.FIEldDefs);
Table2.IndexDefs.Assign(Table1.IndexDefs);
Table2.TableName:=''''new_table'''';

Table2.CreateTable();
finally
Table2.Free();
end;
◇[Delphi]最菜理解DLL建立和引用
//先看DLL source(FILE-->NEW-->DLL)
library project1;
uses
SysUtils, Classes;
function addit(f:integer;s:integer):integer;export;
begin
makeasum:=f s;
end;
exports
addit;
end.
//調用(IN ur PROJECT)
implementation
function addit(f:integer;s:integer):integer;far;external ''''project1'''';//申明
{調用就是addit(2,4);結果顯示6}
◇[Delphi]動態讀取程序自身大小
function GesSelfSize: integer;
var
f: file of byte;
begin
filemode := 0;
assignfile(f, application.exename);
reset(f);
Result := filesize(f);//單位是字節
closefile(f);
end;
◇[Delphi]讀取BiOS信息
with Memo1.Lines do 
begin 
Add(''''MainBoardBiOSName:'''' ^I string(Pchar(Ptr($FE061)))); 
Add(''''MainBoardBiOSCopyRight:'''' ^I string(Pchar(Ptr($FE091)))); 
Add(''''MainBoardBiOSDate:'''' ^I string(Pchar(Ptr($FFFF5)))); 
Add(''''MainBoardBiOSSerialNo:'''' ^I string(Pchar(Ptr($FEC71)))); 對真正的成功者來說,不論他的生存條件如何,都不會自我磨滅 
end; 
◇[Delphi]動態建立MSSQL別名
procedure TForm1.Button1Click(Sender: TObject);
var MyList: TStringList;
begin
MyList := TStringList.Create;
try
with MyList do
begin
Add(''''SERVER NAME=210.242.86.2'''');
Add(''''DATABASE NAME=db'''');
Add(''''USER NAME=sa'''');
end;
Session1.AddAlias(''''TESTSQL'''', ''''MSSQL'''', MyList); //ミMSSQL
Session1.SaveConfigFile;
finally
MyList.Free;
Session1.Active:=True;
Database1.DatabaseName:=''''DB'''';
Database1.AliasName:=''''TESTSQL'''';
Database1.LoginPrompt:=False;
Database1.Params.Add(''''USER NAME=sa'''');
Database1.Params.Add(''''PASSWord='''');
Database1.Connected:=True;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Database1.Connected:=False;
Session1.DeleteAlias(''''TESTSQL''''); 
end; 
◇[Delphi]播放背景音樂
uses mmsystem
//播放音樂
MCISendString(''''OPEN e:\1.MID TYPE SEQUENCER ALIAS NN'''', '''''''', 0, 0);
MCISendString(''''PLAY NN FROM 0'''', '''''''', 0, 0); 成功的人生,需要自己去經營,別再說了,莫再等了,現在就為自己的人生做好規劃,為人生點亮一盞明燈,贏在人生起跑點上。 
MCISendString(''''CLOSE ANIMATION'''', '''''''', 0, 0);
end;
//停止播放
MCISendString(''''OPEN e:\1.MID TYPE SEQUENCER ALIAS NN'''', '''''''', 0, 0);
MCISendString(''''STOP NN'''', '''''''', 0, 0);
MCISendString(''''CLOSE ANIMATION'''', '''''''', 0, 0);
◇[Delphi]接口和類的一個范例代碼
Type{接口和類申明:區別在於不能在接口中申明數據成員、任何非公有的方法、公共方法不使用PUBLIC關鍵字}
Isample=interface//定義Isample接口
function getstring:string;
end;
Tsample=class(TInterfacedObject,Isample)
public
function getstring:string;
end;
//function定義
function Tsample.getstring:string;
begin
result:=''''what show is '''';
end;
//調用類對象
var sample:Tsample;
begin
sample:=Tsample.create;
showmessage(sample.getstring ''''class object!'''');
sample.free;
end;
//調用接口
var sampleinterface:Isample;
sample:Tsample;
begin
sample:=Tsample.create;
sampleInterface:=sample;//Interface的實現必須使用class
{以上兩行也可表達成sampleInterface:=Tsample.create;}  
showmessage(sampleInterface.getstring ''''Interface!'''');
//sample.free;{和局部類不同,Interface中的類自動釋放}
sampleInterface:=nil;{釋放接口對象}
end;
◇[Delphi]任務條就看不當程序
var
ExtendedStyle : Integer;
begin
Application.Initialize;
ExtendedStyle := GetWindowLong (Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW);
Application.CreateForm(TForm1, Form1);
Application.Run;
end. 
◇[Delphi]ALT CTRL DEL看不到程序
在implementation後添加聲明:
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external ''''KERNEL32.DLL'''';
RegisterServiceProcess(GetCurrentProcessID, 1);//隱藏
RegisterServiceProcess(GetCurrentProcessID, 0);//顯示
◇[Delphi]檢測光驅符號 
var drive:char;
cdromID:integer;
begin
for drive:=''''d'''' to ''''z'''' do
begin
cdromID:=GetDriveType(pchar(drive '''':\''''));
if cdromID=5 then showmessage(''''你的光驅為:'''' drive ''''盤!''''); . 
end;
end;
◇[Delphi]檢測聲卡
if auxGetNumDevs()<=0 then showmessage(''''No soundcard found!'''') else showmessage(''''Any soundcard found!'''');
◇[Delphi]在字符串網格中畫圖
StringGrid.OnDrawCell事件
with StringGrid1.Canvas do 
Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic); 
◇[SQL Server]SQL中代替Like語句的另一種寫法
比如查找用戶名包含有"c"的所有用戶, 可以用 
use mydatabase 
select * from table1 where username like''''%c%" 
下面是完成上面功能的另一種寫法: 
use mydatabase 
select * from table1 where charindex(''''c'''',username)>0 
這種方法理論上比上一種方法多了一個判斷語句,即>0, 但這個判斷過程是最快的, 我想信80%以上的運算都是花在查找字 
符串及其它的運算上, 所以運用charindex函數也沒什麼大不了. 用這種方法也有好處, 那就是對%,|等在不能直接用like 
查找到的字符中可以直接在這charindex中運用, 如下: 
use mydatabase 
select * from table1 where charindex(''''%'''',username)>0也可以寫成: 
use mydatabase 
select * from table1 where charindex(char(37),username)>0 
ASCII的字符即為% 
◇[Delphi]SQL顯示多數據庫/表
SELECT DISTINCT A.bianhao,a.xingming, b.gongzi FROM "jianjIE.dbf" a, "gongzi.DBF" b 
WHERE A.bianhao=b.bianhao
◇[Delphi]RFC(Request For Comment)相關
IETF(Internet Engineering Task Force)維護RFC文檔http://www.IEtf.cnri.reston.va.us
RFC882:報文頭標結構
RFC1521:MIME第一部分,傳輸報文方法
RFC1945:多媒體文檔傳輸文檔
◇[Delphi]TNMUUProcessor的使用
var inStream,outStream:TFileStream;
begin
inStream:=TFileStream.create(infile.txt,fmOpenRead);
outStream:=TFileStream(outfile.txt,fmCreate);
NMUUE.Method:=uuCode;{UUEncode/Decode}
//NMUUE.Method:=uuMIME;{MIME}
NMUUE.InputStream:=InStream;
NMUUE.OutputStream:=OutStream;
NMUUE.Encode;{編碼處理}
//NMUUE.Decode;{解碼處理}
inStream.free;
outStream.free;
end;
◇[Delphi]TFileStream的操作
//從文件流當前位置讀count字節到緩沖區BUFFER
function read(var buffer;count:longint):longint;override; . 
//將緩沖區BUFFER讀到文件流中
function write(const buffer;count:longint):longint;override;
//設置文件流當前讀寫指針為OFFSET
function seek(offset:longint;origin:Word):longint;override;
origin={soFromBeginning,soFromCurrent,soFromEnd}
//從另一文件流中當前位置復制COUNT到當前文件流當前位置
function copyfrom(source:TStream;count:longint):longint;
//讀指定文件到文件流
var myFStream:TFileStream;
begin
myFStream:=TFileStream.create(OpenDialog1.filename,fmOpenRead);
end;
[JavaScript]檢測是否安裝IE插件Shockwave&Quicktime


----------------- ..



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved