搜索
您的当前位置:首页正文

delphi杂记

来源:意榕旅游网
listbox从文件中读取列表的操作

ListBox1.Items.LoadFromFile(ExtractFilePath(Application.ExeName)+'aaa.txt');

ListBox1.Items.Add(Edit1.Text);//添加了一个项目

ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName)+'aaa.txt');

删除项目ListBox1.Items.Delete(listbox1.itemindex);

------------------------------------

判断窗体是否已经打开 iffrmPriceInput<>nilthen....

注意:有时窗体虽然已经关闭,但没完全释放,最好在该窗体关闭的CLOSE事件里加入frmPrintInput=nil; ------------------------------------ 关闭MDI子窗口的方法

在子窗口的OnClose事件处理过程中加入如下代码 Action:=caFree;

Delphi为一个Form的关闭行为指定了四种方式,分别是:

caNone--禁止Form被关闭

caHide--Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。

caFree--Form被关闭,并且释放其占用的资源。

caMinimize--Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。

------------------------------------ 系统配置文件*.INI的操作 头部要引用IniFiles 1、声明变量 IniFile:TiniFile; 2、指明路径

IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'option.ini');

3、读取变量,注意变量有类型之分readstring,readinteger...等 titleBMPFile:=IniFile.ReadString('TitleImage','FileName','');//IniFile.ReadString('组名','变量','默认值') IniFile.ReadInteger IniFile.ReadBool 4、写入或修改变量

IniFile.WriteString('标题','变量1','值');

5、用完后释放 IniFile.Free;

------------------------------------ 动态读取图象

Image1.Picture.LoadFromFile(titleBMPFile); ------------------------------------ fastreport自定义函数的用法 1、先在普通工程窗体上定义好函数 2、在frreport控件的userfunction中写入 ifansicomparetext('My_StrToRMB',Name)=0then val:=My_StrToRMB(frparser.Calc(p1)); //MY_STRTORMB是函数名

//如果定义多个函数,就多来几个IF即可。 在报表设计视图中就可以调用这个函数了。

------------------------------------

数组是这样定义的sbh:array[0..9999999,0..1]ofstring; ------------------------------------ treeview的用法 //先定义项目序数和节点 n:Integer;

Node:TTreeNode;

Node:=Tree1.Selected;

if(Node=nil)or(Node.StateIndex=-1)thenExit;//一般可以把不作反应的列的stateindex定为-1 n:=Node.StateIndex; ------------------------------------

Fields[]通过索引返回字段,要自己选择返回的类型! FieldByName()通过名字返回字段,要自己选择返回的类型! FieldValues[]通过名字返回字段的值,自动化类型! ------------------------------------ 调用外部程序方法

用ShellExecute,在USES段加入SHELLAPI,使用时如: ShellExecute(handle,'open','c:/myapp/myapp.exe','-s','',SW_SHOWNORMAL);

第一个参数为父窗口句柄;

第二个参数为打开方式(OPEN,PRINT两种); 第三个参数为执行文件全路径; 第四个参数为执行文件参数;

第五个参数为执行文件开始运行时的初始目录; 第六个参数为为执行文件运行方式

(SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE,

SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED,

SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL); ------------------------------------ 判断文件是否存在

ifnotfileexists('db2.mdb.bak')then... ------------------------------------ 判断按键

ifKey=#13then//如果回车则。。。 ------------------------------------ 退出

关闭窗口close;

关闭程序:Application.Terminate; 退出事件exit;

------------------------------------ 检测软件是否已在运行

ifGetLastError=ERROR_ALREADY_EXISTSthen... ------------------------------------ 定义函数是这样写的

functionIsReadOnly(b:Boolean;colors:Tcolor):Boolean;

------------------------------------ fastreport直接打印

FrReport1.PrepareReport;//初始化

FrReport1.PrintPreparedReport('1',1,True,frAll);//打印

预览FrReport1.showreport; ------------------------------------

找开浏览器,进入某站点。(或调用WINDOWS程序) 进入站点

ShellExecute(Handle,PChar('OPEN'),PChar('http://www.devexpress.com/downloads/index.asp'),nil,nil,SW_SHOWMAXIMIZED); 发送邮件

ShellExecute(Handle,'open',PChar('mailto:'+edtemail.Text+'?subject='),nil,nil,SW_SHOW);

------------------------------------ 打开文件对话框

ifOpenPictureDialog.Executethen

------------------------------------

调用帮助文件

Application.HelpFile:='../../Help/eBars.hlp';

------------------------------------ 打开窗口

TForm1.Create(self).ShowModal;

------------------------------------ 取得当前执行程序的路径

FPath:=ExtractFilePath(Application.ExeName); 或

FileName:=ExtractFilePath(ParamStr(0))+'/MDB/电子通讯录.mdb';

------------------------------------ 当前路径 getcurrentdir

------------------------------------

判断当前鼠标处于某个位置(TAG)

caseTComponent(Sender).Tagof 0:begin ...

lbBarBackgroud.Caption:=sCustomImage; end; 1:begin ...

lbBarBackgroud.Caption:=sCustomImage; end; 2:begin ...

lbBarBackgroud.Caption:=sCustomImage; end;

------------------------------------ 数据库连接

1、建立一个adoconnection控件,命名为conn 2、建立一个adodataset控件,命名为ds

然后就可以用以下语句连接并执行SQL查询(本例是access的数据库,带密码)。

conn.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+getcurrentdir+'/data/pn.mdb;PersistSecurityInfo=False;jetoledb:databasepassword=80513'; conn.Connected:=true; ds.Active:=false;

ds.CommandText:='select拜访日期,拜访时间,拜访客户,拜访地点,谈话内容fromkhbforderby拜访日期desc'; ds.Active:=true;

------------------------------------ ADODataSet1.State的用法

ifADODataSet1.Statein[dsEdit,dsInsert]then ADODataSet1.Post; ------------------------------------

ADOQuery.open和ADOQuery.execSQL的区别 用于存贮时如insert只能用execSQL ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ 回车光标移到另一个输入框

ifkey=#13then

cmb_name.SetFocus;

------------------------------------ 播放声音

playsound('c:/windows/media/start.wav',0,SND_ASYNC); ------------------------------------ 列表框listbox增加项目

cmb_name.Items.Add(adotable1.FieldValues['帐号']);

------------------------------------ listview用法

ListView.Selected:=ListView.Items[0]; ListView.Selected.Focused:=True; ListView.Selected.MakeVisible(False); ListView.Selected.Index ListView.Items.Count

ListView.Items.Delete(3)//删除第3个项目

ListView.Items.Add.Caption:='dddddddd';//增加一个项目

ListView.Items.BeginUpdate; ListView.Items.EndUpdate

ListView.Canvas.Font.Color:=clGrayText; ifListView.Selected<>nilthen。。。。。

//往listview添加项目 先定义

varitm:TListItem; 然后

listview.Items.Clear; itm:=listview.Items.Add; itm.ImageIndex:=5; itm.Caption:=Msg.Subject; itm.SubItems.Add('aaaaa'); itm.SubItems.Add('ffffff'); itm.SubItems.Add('ffdfdfdf'); itm.SubItems.Add('oooo'); ------------------------------------ 静态调用DLL的方法 有参数

procedureCreateSms(Text:Pchar);stdcall;External'SmsLib.dll';

无参数

procedureCreateSms;stdcall;External'SmsLib.dll'; ------------------------------------ 确定、取消对话框作用

ifapplication.MessageBox('真的退出?','提示',mb_okcancel)=idokthen

application.Terminate;//Terminate是终止程序

showmessage('请先选中要修改的班级');//这个是简单的显示提示框 messagebox(self.Handle,'价格输入不合法!','提示',MB_OKorMB_ICONASTERISK); ------------------------------------ 调用窗体的步骤

先引用该窗体的单元,然后建立窗体,最后显示出来。 例1: useuxsgl;

Application.CreateForm(TFmXsgl,FmXsgl); fmxsgl.ShowModal; 例2:

Frm_LendDetail:=TFrm_LendDetail.Create(self); Try

Frm_LendDetail.ShowModal; Finally

Frm_LendDetail.Free; End;

------------------------------------ 数据库查询

先建立数据源,然后添加一个TADOQUERY adoquery1.SQL.Clear; adoquery1.Close;

adoquery1.SQL.Add('select*fromtkcborderbyckcb_kh'); adoquery1.Open;

aaa=adoquery1.FieldValues['ckcb_kc'];//取出当前记录某字段的值 adoquery1.Next;//下一记录 adoquery1.Close;//关闭查询

------------------------------------ 判断键盘输入字符-chr(13)是回车

ifkey=chr(13)then bitbtn1.SetFocus;

------------------------------------ 时间格式

lblTime.Caption:=FormatDateTime('yyyymmddhh:nn:ss',Now);

------------------------------------ 表数据的添加添加

dmd是数据模块tbl_zgdb是表名 withdmd.tbl_zgdbdobegin Append;

FieldValues['HYZH']:=Edt_HYZH.text; FieldValues['XM']:=Edt_xm.text; FieldValues['XB']:=Edt_xb.text; FieldValues['dw']:=Edt_dw.text; FieldValues['ZZMM']:=zzmm;

FieldValues['CSNY']:=trim(Edt_csny.text); FieldValues['GZSJ']:=Edt_gzsj.text; FieldValues['DBLB']:=dblb; FieldValues['ZCLB']:=zclb;

FieldValues['XL']:=xl;

FieldValues['BZ']:=Edt_bz.text; Post; close; end;

------------------------------------ 列表框的选项值

Edit1.Text:=listbox1.Items.Strings[listbox1.itemindex]; ------------------------------------ Delphi键盘按键伪码

用法:ifkey=chr(VK_RETURN)then...

常数名称十六进制值十进制值对应按键 VK_LBUTTON011鼠标的左键 VK_RBUTTON022鼠标的右键 VK-CANCEL033Contol-break执行

VK_MBUTTON044鼠标的中键(三按键鼠标) VK_BACK088Backspace键 VK_TAB099Tab键 VK_CLEAR0C12Clear键 VK_RETURN0D13Enter键

VK_SHIFT1016Shift键 VK_CONTROL1117Ctrl键 VK_MENU1218Alt键 VK_PAUSE1319Pause键 VK_CAPITAL1420CapsLock键 VK_ESCAPE1B27Ese键 VK_SPACE2032Spacebar键 VK_PRIOR2133PageUp键 VK_NEXT2234PageDomw键 VK_END2335End键 VK_HOME2436Home键

VK_LEFT2537LEFTARROW键(←) VK_UP2638UPARROW键(↑) VK_RIGHT2739RIGHTARROW键(→) VK_DOWN2840DOWNARROW键(↓) VK_Select2941Select键 VK_EXECUTE2B43EXECUTE键 VK_SNAPSHOT2C44PrintScreen键 VK_Insert2D45Ins键 VK_Delete2E46Del键 VK_HELP2F47Help键 VK_030480键

VK_131491键 VK_232502键 VK_333513键 VK_434524键 VK_535535键 VK_636546键 VK_737557键 VK_838568键 VK_939579键 VK_A4165A键 VK_B4266B键 VK_C4367C键 VK_D4468D键 VK_E4569E键 VK_F4670F键 VK_G4771G键 VK_H4872H键 VK_I4973I键 VK_J4A74J键 VK_K4B75K键 VK_L4C76L键 VK_M4D77M键

VK_N4E78N键 VK_O4F79O键 VK_P5080P键 VK_Q5181Q键 VK_R5282R键 VK_S5383S键 VK_T5484T键 VK_U5585U键 VK_V5686V键 VK_W5787W键 VK_X5888X键 VK_Y5989Y键 VK_BZ5A90Z键

VK_NUMPAD06096数字键0键 VK_NUMPAD16197数字键1键 VK_NUMPAD26298数字键2键 VK_NUMPAD36399数字键3键 VK_NUMPAD464100数字键4键 VK_NUMPAD565101数字键5键 VK_NUMPAD666102数字键6键 VK_NUMPAD767103数字键7键 VK_NUMPAD868104数字键8键

VK_NUMPAD969105数字键9键 VK_MULTIPLY6A106*键 VK_ADD6B107+键

VK_SEPARATOR6C108Separator键 VK_SUBTRACT6D109-键 VK_DECIMAL6E110.键 VK_DIVIDE6F111键 VK_F170112F1键 VK_F271113F2键 VK_F372114F3键 VK_F473115F4键 VK_F574116F5键 VK_F675117F6键 VK_F776118F7键 VK_F877119F8键 VK_F978120F9键 VK_F1079121F10键 VK_F117A122F11键 VK_F127B123F12键

VK_NUMLOCK90144NumLock键 VK_SCROLL91145ScrollLock键 ==================

Delphi中怎么将实数取整?

floor和ceil是mathunit里的函数,使用前要先UsesMath。

trunc和round是systemunit里的函数,缺省就可以用。

floor直接往小的取,比如floor(-123.55)=-124,floor(123.55)=123

trunc直接切下整数,比如trunc(-123.55)=-123,floor(123.55)=123

ceil直接往大的取,比如ceil(-123.55)=-123,ceil(123.55)=124

round计算四舍五入,比如round(-123.55)=-124,round(123.55)=124

================================================== 如何把RGB颜色转变成Delphi的Tcolor?

form1.color:=rgbtocolor(255,0,0);

函数: ---------

functionRGBToColor(R,G,B:Byte):TColor; begin

Result:=BShl16or GShl8or R; end;

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

//////////////////////////////////////////////////////////////////////////////// 回调函数(CallbackRoutine)的解释 MyWindowClassInfo=packedrecord

Style:UINT ...

lpFnWndProc:Pointer ...

end;

应用程序只需要将一个能处理消息的函数地址指定给

MyWindowClassInfo中的lpFnWndProc字段,执行环境就知道消息需要调用的函数,于是应用程序可以把任何的函数地址指定给该字段以代表可以处理窗口消息的函数,这个函数是由执行环境来调用的,因此这种函数也被称为回调函数(CallbackRoutine)。

回调函数的机制:调用者在初始化一个对象的时候,将一些参数传递给对象,同时将一个调用者可以访问的函数地址传递给该对象,这个函数就是调用者和被调用者之间的一种通知约定,当约定的事件发生时,被调用者就会按照回调函数地址调用该函数。 ///////////////////////////////////////////////////////////////////////////////////////// ObjectInspector(对象检视器)

Properties页显示窗体中当前被选择部件的属性信息

Events页列出了当前部件可以响应的事件

(小窍门:ObjectInspector一直可见,可将鼠标移到ObjectInspector上,按动右键,以启动ObjectInspector的弹出式菜单,将其设置为

StayOnTop。)

部件的调整与对齐

如果要精确地表述部件的尺寸,可以在ObjectInspector上,改变Left(表示部件左边缘到窗体左边框的象素点数)、Top(表示窗体上边框到部件上边缘的象素点数)、Width(部件本身的宽度)、Height(部件本身的高度)等属性。

使四个按钮对齐。先将四个按钮选为一组:按住并向右下方拖动鼠标左键,在窗体上画出围绕四个按钮的矩形,释放左键后,被选中的按钮周边会出现暗灰色的边框。选用Edit|Align命令,

或选中4个按钮,出现灰色边框后,点右键,选择position,后面align…等,是不同方式的对齐,可以调整同样大小的尺寸。 锁定部件

选择主菜单上的Edit|LockControls选项

设置窗体的缺省按钮

按钮的Default属性从False改成True,即将它设为窗体的缺省按钮

OnClick事件,即按钮接收到左键单击时应用程序所作出的反应

ColorDialog1.Execute;

程序的第一句用Execute方法,使得ColorDialog运行它本身

Label(标签)一般放在对象的旁边,用来标记这些对象,当用户使用“Alt+关键字母”时,将自动选中它所指向的对象。方法是设置Label部件的FocusControl属性,在值段中,选用与它关联对象的对象名。

Edit、MaskEdit、Memo部件都是用作接收、显示用户输入文本的。ReadOnly在运行时间内控制对象是否可以进行Windows的操作,当此值为False时,该框内的文本就不能被复制到剪贴板上。MaxLength可以设置输入文本的长度限制。用PasswordChar属性可以按照显示隐蔽密码的方法显示用户输入文本。当一个字段被加上高亮度显示时,按键操作会将这一字段删除,替换成当前的键盘输入。这种设置为操作提供了方便,您不必每次先删除原来的文本;但也可能会导致误删文本。将AutoSelect属性设置成False,这种替代功能就被取消了。

它的EditMask属性为它提供了过滤文本的格式。点动这一属性的省略按钮,会弹出过滤编辑对话框

Memo是备注框,与以上对象不同的是,它可以接收多行文本输入。将ScrollBars设置成ssVertical,可以为它加上一个垂直的滚行条。Align属性调整该对象在窗口中的对齐情况,有alNone(无对齐指定)、

alBottom(底部对齐)、alClient(全窗口显示)等可以选择;而Alignment属性则决定了文本在框中的对齐显示格式。Lines属性访问的文本被存储在一个TStrings对象中,按动它的省略按钮,可以通过对话框向它增加文本,也可以用程序对这一属性进行操作,以达到修改或增加备注文本的目的。

ComboBox(组合框)显示可用磁盘驱动器

ListBox(列表框)Windows打开文件操作时显示文件列表

TStringList 常用操作

2011-03-17 20:23

转自:http://www.cnblogs.com/del/archive/2007/12/10/990040.html //TStringList 常用方法与属性: var

List: TStringList; i: Integer; begin

List := TStringList.Create;

List.Add('Strings1'); {添加} List.Add('Strings2');

List.Exchange(0,1); {置换} List.Insert(0,'Strings3'); {插入}

i := List.IndexOf('Strings1'); {第一次出现的位置} List.Sort; {排序} List.Sorted := True; {指定排序}

List.Count; {总数}

List.Text; {文本集合} List.Delete(0); {删除, 0是第一个数据} List.LoadFromFile('c:\mp.txt');{打开} List.SaveToFile('c:\mp.txt'); {保存} List.Clear; {清空} List.Free; {释放} end; //读入字符串 var List: TStringList; begin List := TStringList.Create; List.CommaText := 'aaa,bbb,ccc,ddd'; //相当于: List.Text := 'aaa' + #13#10 + 'bbb' + #13#10' + 'ccc' + '#13#10' + 'ddd'; ShowMessage(IntToStr(List.Count)); //4 ShowMessage(List[0]); //aaa List.Free; end; //置换分隔符 var List: TStringList; begin List := TStringList.Create; List.Delimiter := '|'; List.DelimitedText := 'aaa|bbb|ccc|ddd'; ShowMessage(IntToStr(List.Count)); //4 ShowMessage(List[0]); //aaa List.Free; end;

//类似的哈希表操作法 var

List: TStringList; begin

List := TStringList.Create;

List.Add('aaa=111'); List.Add('bbb=222'); List.Add('ccc=333'); List.Add('ddd=444');

ShowMessage(List.Names[1]); //bbb

ShowMessage(List.ValueFromIndex[1]); //222 ShowMessage(List.Values['bbb']); //222

//ValueFromIndex 可以赋值: List.ValueFromIndex[1] := '2'; ShowMessage(List[1]); //bbb=2

//可以通过 Values 赋值: List.Values['bbb'] := '22'; ShowMessage(List[1]); //bbb=22

List.Free; end;

//避免重复值 var

List: TStringList; begin

List := TStringList.Create;

List.Add('aaa');

List.Sorted := True; //需要先指定排序

List.Duplicates := dupIgnore; //如有重复值则放弃

List.Add('aaa');

ShowMessage(List.Text); //aaa

//Duplicates 有3个可选值: //dupIgnore: 放弃; //dupAccept: 结束; //dupError: 提示错误.

List.Free; end;

//排序与倒排序 {排序函数}

function DescCompareStrings(List: TStringList; Index1, Index2: Integer): Integer; begin

Result := -AnsiCompareText(List[Index1], List[Index2]); end;

procedure TForm1.Button1Click(Sender: TObject); var

List: TStringList; begin

List := TStringList.Create;

List.Add('bbb'); List.Add('ccc'); List.Add('aaa');

//未排序

ShowMessage(List.Text); //bbb ccc aaa

//排序 List.Sort;

ShowMessage(List.Text); //aaa bbb ccc

//倒排序

List.CustomSort(DescCompareStrings); //调用排序函数 ShowMessage(List.Text); //ccc bbb aaa

//假如:

List.Sorted := True; List.Add('999');

List.Add('000'); List.Add('zzz');

ShowMessage(List.Text); //000 999 aaa bbb ccc zzz end;

Delphi中MessageBox用法 2011-03-17 11:53

转载于网络

在delphi中经常要用到一个提示对话框,根据用户选择执行不同的命令,MessageBox就是常用的对话框,它不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。 1、函数原型及参数

function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。 Text:欲显示的信息字符串。 Caption:对话框标题字符串。 Type:对话框类型常量。

该函数的返回值为整数,用于对话框按钮的识别。

2、类型常量

对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。

(1)按钮组合常量

MB_OK = $00000000 //一个确定按钮 默认

MB_OKCANCEL = $00000001 //一个确定按钮,一个取消按钮 MB_ABORTRETRYIGNORE = $00000002; //一个异常终止按钮,一个重试按钮,一个忽略按钮 MB_YESNOCANCEL = $00000003; //一个是按钮,一个否按钮,一个取消按钮

MB_YESNO = $00000004; //一个是按钮,一个否按钮

MB_RETRYCANCEL = $00000005; //一个重试按钮,一个取消按钮 (2)缺省按钮常量

MB_DEFBUTTON1 = $00000000; //第一个按钮为缺省按钮

MB_DEFBUTTON2 = $00000100; //第二个按钮为缺省按钮 MB_DEFBUTTON3 = $00000200; //第三个按钮为缺省按钮 MB_DEFBUTTON4 = $00000300; //第四个按钮为缺省按钮 (3)图标常量免费资源收集网(http://www.freezq.cn)

MB_ICONHAND = $00000010; //“×”号图标 MB_ICONQUESTION = $00000020; //“?”号图标 MB_ICONEXCLAMATION = $00000030; //“!”号图标 MB_ICONASTERISK = $00000040; //“i”图标 MB_USERICON = $00000080; //用户图标 MB_ICONWARNING = MB_ICONEXCLAMATION; //“!”号图标 MB_ICONERROR = MB_ICONHAND; //“×”号图标 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标 MB_ICONSTOP = MB_ICONHAND; //“×”号图标 (4)运行模式常量

MB_APPLMODAL = $00000000; //应用程序模式,在未结束对话框前也能切换到另一应用程序

MB_SYSTEMMODAL = $00001000; //系统模式,必须结束对话框后,才能做其他操作

MB_TASKMODAL = $00002000; //任务模式,在未结束对话框前也能切换到另一应用程序

MB_HELP = $00004000; //Help Button 3、函数返回值

0 //对话框建立失败 IdOk = 1 //按确定按钮 IDCancel = 2 //按取消按钮 IDAbout = 3 //按异常终止按钮 IDRetry = 4 //按重试按钮 IDIgnore = 5 //按忽略按钮 IDYes = 6 //按是按钮 IDNo = 7 //按否按钮

应用实例:

Application.MessageBox('你确定此操作吗?','询问',MB_OK);//只有一个确定按钮

MessageBox(0,'你确定此操作吗?','询问',MB_OK); //只有一个确定按钮 MessageBox(0,'你确定此操作吗?','询问',1); //确定取消(如果不带图标,也可以用数字)

MessageBox(0,'你确定此操作吗?','询问',MB_OKCANCEL);//确定取消二个按钮

MessageBox(0,'你确定此操作吗?','询问

',MB_OKCANCEL+MB_ICONQUESTION);//确定取消,带?号图标 MessageBox(0,'你确定此操作吗?','询问

',MB_OKCANCEL+MB_ICONQUESTION+MB_DEFBUTTON2);//确定取消,带?号图标,

并把第二个按钮“取消”设为默认按钮!

如果想判断用户选择了那个按钮可以这样 var

x:integer; begin

x:=MessageBox(0,'你确定此操作吗?','询问',MB_OKCANCEL); end;

delphi中@ ^ 这些符号是什么意思 2011-02-24 16:28

比如 var

i:integer;

p:^integer; //表示p是一个指向整型变量的指针

p:=@i;

@i则是取i的内存地址,并放入指针变量p中。 ^integer,表示整型指针.

p^ 则是从 指针p 中取出值i

【转】 Delphi数据类型列表 2011-05-26 15:06 转载自 分享

最终编辑 Assem6ler

分类 范围 -2147483648 .. 2147483Integer 647 Cardinal 简单类序数 型 整数 Smallint -32768 .. 32767 -2147483648 .. 2147483Longint 647 Int64 -263 .. 263 8 有符号64位 4 有符号32位 2 有符号16位 Shortint 0 .. 4294967295 -128 .. 127 4 1 无符号32位 有符号8位 4 有符号32位 字节 备注 Byte Word Longword AnsiChar(Cha0 .. 255 0 .. 65535 0 .. 4294967295 1 2 4 无符号8位 无符号16位 无符号32位 ANSI字符集 字符 r) WideChar Unicode字符集 False < True Ord(False) = 0 Boolean Ord(True) = 1 Succ(False) = True Pred(True) = False 布尔 ByteBool WordBool False <> True Ord(False) = 0 Ord(True) <> 0 LongBool Succ(False) = True Pred(False) = True 枚举 子界 Real 8位 16位 1 1 2 4 [精度]15..16 [精度]11..12; 5.0×10-324 .. 1.7×10308 8 Real48 2.9×10 .. 1.7×10 -39386 向后兼容 Single Double 实数 Extended Comp 1.5×10-45 .. 3.4×1038 4 [精度]7..8 [精度]15..16 [精度]19..20 [精度]19..20 5.0×10-324 .. 1.7×10308 8 3.6×10-4951 .. 1.1×104932 10 -263 + 1 .. 263 - 1 -922337203685477.58088 Currency .. 922337203685477.5807 8 [精度]19..20 ShortString 255个字符 2..256B 向后兼容 4B..2GAnsiString 大约 2 个字符 B 318位(ANSI)字符 多用户服务和 4B..2G多语言应用程序; WideString 大约 2 个字符 B 字符串 容 String String[0..255] 其他 PChar PAnsiString PWideString 集合 Set 最多256个元素[0..255] 和com定义的BSTR兼30静态数组 数组 动态数组 记录 结构类文件 型 类 Class Class referen类引用 ce 接口 无类型指针 Interface Pointer PAnsiString PString 指针类预定义类型指PByteArray 型 有类型指针 针 PCurrency PDouble PExtended File Record PSingle PInteger POleVariant PShortString PTextBuf PVarRec PVariant PWideString PWordArray 程序过程类 过程类型 型 对象过程类 型 变体类 型 Procedural Procedural Variant OleVariant delphi的取整函数round、trunc、ceil和floor 2011-03-23 15:05 网络转帖

.Round(四舍六入五留双)

功能说明:对一个实数进行四舍五入。(按照银行家算法)

例: var

i, j: Integer; begin

i := Round(1.5); // i等于2 j := Round(2.5); // j等于2 end;

在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样:采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理

,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。

例:

i:= Round(11.5)//i等于12 i:= Round(10.5)//i等于10

这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的\"四舍五入\"要科学。

如果要使用传统的\"四舍五入\"方法,可以使用下面函数: function RoundClassic(R: Real)

2.trunc(取得X的整数部分)

如:trunc(-123.55)=-123, floor(123.55)=123 3.ceil(取得大于等于X的最小的整数) 如:ceil(-123.55)=-123, ceil(123.15)=124 4.floor(取得小于等于X的最大的整数) 如:floor(-123.55)=-124,floor(123.55)=123

注:floor和ceil是math unit里的函数,使用前要先Uses Math

delphi与c指针对比

Object Pascal的指针

一、类型指针的定义。对于指向特定类型的指针,在C中是这样定义的: int *ptr; char *ptr;

与之等价的Object Pascal是如何定义的呢? var

ptr : ^Integer; ptr : ^char;

其实也就是符号的差别而已。

二、无类型指针的定义。C中有void *类型,也就是可以指向任何类型数据的指针。Object Pascal为其定义了一个专门的类型:Pointer。于是, ptr : Pointer; 就与C中的 void *ptr; 等价了。

三、指针的解除引用。要解除指针引用(即取出指针所指区域的值),C 的语法是 (*ptr),Object Pascal则是 ptr^。

四、取地址(指针赋值)。取某对象的地址并将其赋值给指针变量,C 的语法是

ptr = &Object; Object Pascal 则是 ptr := @Object;

也只是符号的差别而已。

五、指针运算。在C中,可以对指针进行移动的运算,如: char a[20]; char *ptr=a; ptr++; ptr+=2;

当执行ptr++;时,编译器会产生让ptr前进sizeof(char)步长的代码,之后,ptr将指向a[1]。ptr+=2;这句使得ptr前进两个sizeof(char)大小的步长。同样,我们来看一下Object Pascal中如何实现: var

a : array [1..20] of Char;

ptr : PChar; //PChar 可以看作 ^Char begin

ptr := @a;

Inc(ptr); // 这句等价于 C 的 ptr++; Inc(ptr, 2); //这句等价于 C 的 ptr+=2; end;

六、动态内存分配。C中,使用malloc()库函数分配内存,free()函数释放内存。如这样的代码: int *ptr, *ptr2; int i;

ptr = (int*) malloc(sizeof(int) * 20); ptr2 = ptr;

for (i=0; i<20; i++){ *ptr = i; ptr++; }

free(ptr2); Object Pascal中,动态分配内存的函数是GetMem(),与之对应的释放函数为FreeMem()(传统Pascal中获取内存的函数是New()和 Dispose(),但New()只能获得对象的单个实体的内存大小,无法取得连续的存放多个对象的内存块)。因此,与上面那段C的代码等价的Object Pascal的代码为: var ptr, ptr2 : ^integer; i : integer; begin

GetMem(ptr, sizeof(integer) * 20);

//这句等价于C的 ptr = (int*) malloc(sizeof(int) * 20); ptr2 := ptr; //保留原始指针位置 for i := 0 to 19 do begin

ptr^ := i; Inc(ptr); end;

FreeMem(ptr2); end;

对于以上这个例子(无论是C版本的,还是Object Pascal版本的),都要注意一个问题,就是分配内存的单位是字节(BYTE),因此在使用GetMem时,其第二个参数如果想当然的写成 20,那么就会出问题了(内存访问越界)。因为GetMem(ptr, 20);实际只分配了20个字节的内存空间,而一个整形的大小是四个字节,那么访问第五个之后的所有元素都是非法的了(对于malloc()的参数同样)。

七、字符数组的运算。C语言中,是没有字符串类型的,因此,字符串都是用字符数组来实现,于是也有一套str打头的库函数以进行字符数组的运算,如以下代码:

char str[15]; char *pstr;

strcpy(str, \"teststr\"); strcat(str, \"_testok\");

pstr = (char*) malloc(sizeof(char) * 15); strcpy(pstr, str); printf(pstr); free(pstr);

而在Object Pascal中,有了String类型,因此可以很方便的对字符串进行各种运算。但是,有时我们的Pascal代码需要与C的代码交互(比如:用Object Pascal的代码调用C写的DLL或者用Object Pascal写的DLL准备允许用C写客户端的代码)的话,就不能使用String类型了,而必须使用两种语言通用的字符数组。其实,Object Pascal提供了完全相似C的一整套字符数组的运算函数,以上那段代码的Object Pascal版本是这样的: var str : array [1..15] of char;

pstr : PChar; //Pchar 也就是 ^Char begin

StrCopy(@str, 'teststr'); //在C中,数组的名称可以直接作为数组首地址指针来用

//但Pascal不是这样的,因此 str前要加上取地址的运算符

StrCat(@str, '_testok');

GetMem(pstr, sizeof(char) * 15); StrCopy(pstr, @str);

Write(pstr); FreeMem(pstr); end;

八、函数指针。在动态调用DLL中的函数时,就会用到函数指针。假设用C写的一段代码如下:

typedef int (*PVFN)(int); //定义函数指针类型 int main() {

HMODULE hModule = LoadLibrary(\"test.dll\"); PVFN pvfn = NULL;

pvfn = (PVFN) GetProcAddress(hModule, \"Function1\"); pvfn(2);

FreeLibrary(hModule); }

就我个人感觉来说,C语言中定义函数指针类型的typedef代码的语法有些晦涩,而同样的代码在Object Pascal中却非常易懂: type PVFN = Function (para : Integer) : Integer; var

fn : PVFN;

//也可以直接在此处定义,如:fn : function (para:Integer):Integer; hm : HMODULE; begin

hm := LoadLibrary('test.dll');

fn := GetProcAddress(hm, 'Function1'); fn(2);

FreeLibrary(hm); end;

以上是一位Delphi高手给我回的贴!

delphi 指针

2011-03-18 15:33 var

echopointer: pbyte;

echopointer:=pbyte(memo.Memory); inc(pbyte(echopointer

动态数组的释放 2011-03-18 10:37

//动态数组一般是不需要手动释放的, 如果需要... var

arr: array of Integer; begin

{设置动态数组维数} SetLength(arr,10);

{释放方法一} arr := nil;

{释放方法二}

SetLength(arr, 0);

{释放方法三} Finalize(arr); end;

【转】 main(),WinMain(),wmain(),wWinMain(),_tmain(),_tWinMain()六个函数区别 2011-01-17 11:34 转载自 sppeivan 最终编辑 iamyangyz

介绍一下main(),WinMain(),wmain(),wWinMain(),_tmain(),_tWinMain()这六个函数的:

1 各自的特点(不同点) 2 使用方法 3 使用场合

main()是WINDOWS的控制台程序(32位)或DOS程序(16位); WinMain()是WINDOWS的GUI程序;

wmain()是UNICODE版本的main(),wWinMain()是UNICODE版本的WinMain(); _tmain()是个宏,如果是UNICODE则他是wmain()否则他是main();

_tWinmain()是个宏,如果是UNICODE则他是wWinmain()否则他是WinMain();

main是控制台程序的入口;

winMain是win32 Application程序的入口;

_t是为了UNICDOE的兼容。

TStrings与TStringList的区别

2009-05-23 10:53:57| 分类: 默认分类 | 标签: |字号大中小 订阅

1、TStrings、TStringList不是可视组件,只是两个通用类,与可视组件TMemo、TRichEdit没有可比性。

2、TStrings、TStringList都是管理“字符串-附属对象”这样一个列表,前者是抽象类,不能被实例化,只是

定义了一些通用的属性、方法,而后者是从TStringList继承而来,可以实例化使用。如:

var

S1, S2: TStrings; S3: TStringList;

begin

S1 := TStrings.Create; //这样就不可以 S3 := TStringList.Create; //这样是可以的 S2 := TStringList.Create; //这样也是可以的

end;

与上面不同的是S2不能直接调用TStrings类没有的属性方法,而需要类型转换TStringList(S2)之后才能

调用

3.TMemo通常用于显示多行的纯文本内容。其Items属性类型是TStrings(实际上是继承自TStrings

的TMemoStrings),因此可以直接从TStrings兼容类型的变量导入数据。

4.TRichEdit通常用于显示格式化的文本内容。其Items属性类型也是TStrings(实际上是继承自

TStrings的TRichEditStrings),因此可以直接从TStrings兼容类型的变量导入数据。

Tstringlist 是Tstrings的后代呀。

你可以声明Tstrings的对象,但那些 add,delete等方法是不能用的,因为是Abstract方法。

所以 var strs:Tstrings;

begin

strs:=Tstringlist.create;//Tstringlist实现了Tstrings中的抽象方法。

strs.add('字符串');

strs.free;

end;

TstringList是由TStrings派生而来,而Tstrings是一个抽象类。继承于Tpersistent类。 Tstrings的派生类主要用于管理字符串集合和对象集合。Tlist类主要用于管理对象集,因为它内部管理的是一个对象引用数组。TstringList在内部分别为字符串和对象各声明了一个数组来存储数据,能同时

保存字符串和对象。

使用Tstrings来管理字符串的最大好处是类字符串或类的操作提供了ADD、INSERT、DELETE和查找索引(INDEXOF)等方法。 LoadFromFile and SaveToFile 可将TSTrings所存的字符串存成文件,也可将文件中的字符串读入。在用ADDOBJECT向TSTRINGLIST加入对象时,同时要加入一个与对象相关联的字符串,即对象的名,用此字符串可查找对象。在用INDEXOFOBJECT方法查找对象的索引时,该方法是用对象的指针来判断的。因此在实际应用中可用对象名来查找索引,然后由索引定位对象。

动态创建MYSQL数据库的ODBC链接

1、用Delphi连接MySQL数据库,一般推荐两种方式:dbExpress,ODBC。dbExpress的效率较高,但对于本地客户端数据集比较麻烦。ODBC非常通用,如果用ODBC作为数据库访问层,后台数据库可以很容易切换,而代码基本不用修改。我们假设用ODBC连接MySQL数据库,首先要下载MySQL的ODBC驱动,到MySQL的官方网站就可以下载,然后安装即可。

2、在程序中一般要根据用户的配置自动配置ODBC,而不是让用户打开ODBC的配置窗口进行手工配置。ODBC的配置信息一般写在注册表中: HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBC.INI/ODBC Data Sources。我们可以通过写注册表的方法来建立ODBC连接,但操作注册表还算麻烦;为了简单,采用ODBC驱动提供的配置API函数:SQLConfigDataSource。 首先在Delphi单元中导入SQLConfigDataSource的声明: function SQLConfigDataSource(hwndParent: Integer; fRequest:

Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';

在需要配置ODBC的地方执行SQLConfigDataSource函数: SQLConfigDataSource(0, 4, 'MySQL ODBC 3.51 Driver', 'DSN=yourdsnname' + chr(0) + 'DATABASE=yourdatabase' + chr(0) + 'SERVER=192.168.10.36'+chr(0) + 'UID=root' + chr(0) + 'PWD=yourpwd' + chr(0)); 第一个参数固定为0。

第二个参数是配置操作类型: #define ODBC_ADD_DSN 1 #define ODBC_CONFIG_DSN 2 #define ODBC_REMOVE_DSN 3 #define ODBC_ADD_SYS_DSN 4 #define ODBC_CONFIG_SYS_DSN 5 #define ODBC_REMOVE_SYS_DSN 6 #define ODBC_REMOVE_DEFAULT_DSN 7 第三个参数是数据库驱动的名称。

第四个参数是配置属性的字符串,每个属性间一定用'/0'分隔,Delphi中可以用chr(0)。

执行完后就建立了名称为yourdsnname的ODBC数据源,你可以重复调用上面的函数而不用担心会建立多个同名的ODBC数据源。 建立SQLSERVER的ODBC:

SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,'SQL

Server','DSN=Record_ODBC'+ chr(0) +'Server=(local)'+ chr(0) +'Database=master'+ chr(0) +'Description=DragonPC SQLServer ODBC Source'+ chr(0));

{ DSN:你的ODBC数据源名称。

Server:你的数据库服务器名称,使用(local)指的是本地计算机安装的数据库。注:最新的SQL Server 2000支持一台计算机运行多个SQL Server服务,这个时候你需要指定SqlSever的InstanceName。 Address:指定SQL Server服务器的网络IP地址。 Database:指定默认数据库名称。 Language:指定默认语言。 Description:备注信息。}

建立DBF表ODBC:

SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, 'Microsoft Visual FoxPro Driver' + CHR(0), 'dsn=SourceTable' + CHR(0) + 'BackgroundFetch=Yes' + CHR(0) + 'Description=descripcion de la conexion' + CHR(0) + 'Exclusive=No' + CHR(0) +sourcedbstr + CHR(0) +'Sourcetype=DBF');

其他均雷同,只是在建立DBF表调试了好长时间,写出来希望大家免去浪费时间。

注:以上内容只供初学者遇到类似问题参考。

with AQuery1 do begin

close; //关闭数据库连接

sql.clear; //清除上次使用的sql语句

sql.add('select * from tab1'); //设置本次使用的sql语句 open; //打开数据库连接并执行查询语句 first; //移动到第一条记录 end;

iocomp控件包中的空间iplot的常用操作: iPlot1.RemoveAllChannels; // 移除所有通道 iPlot1.RemoveAllXAxes; // 移除所有X轴

iPlot1.TitleText:='实时温度曲线'; // 设置曲线图的标题 //iPlot1.TitleVisible := False; // 不显示曲线图标题 iPlot1.YAxis[0].Span := 100; // 设置Y轴的显示范围 iPlot1.YAxis[0].Min:=-15; // 设置Y轴的起始值 iPlot1.YAxis[0].Title:='温度值(℃)'; // Y轴名称 iPlot1.YAxis[0].TitleShow:=True;

//---配置温度曲线--------------------------------------------------- iPlot1.AddChannel; // 添加一个曲线

iPlot1.Channel[0].TitleText := '温度'; // 设置曲线的名称 iPlot1.Channel[0].Color := clRed; // 设置曲线的颜色 // 曲线插值,加上下面这一句显示的曲线不会有棱角 iPlot1.Channel[0].InterpolationStyle := ipistCubicSpline; iPlot1.Channel[0].TraceLineWidth := 2; // 曲线显示的宽度

iPlot1.AddXAxis; // 添加一个X轴

iPlot1.XAxis[0].Title:='采样时间(S)'; // X轴名称 iPlot1.XAxis[0].TitleShow:=True;

iPlot1.XAxis[0].Span := 200; // X轴显示范围

iPlot1.Channel[0].XAxisName := iPlot1.XAxis[0].Name; iPlot1.XAxis[0].LabelsFont.Color := clRed; // 标签字体颜色

因篇幅问题不能全部显示,请点此查看更多更全内容

Top