delphi 学习研究笔记


1.循环字符串连接代码
var
a,b,c:Integer;
begin
for a:=0 to 10 do
e.Text:=e.Text+inttostr(a);

end;

2.添加到列表指令
listbox1.Items.add(edit1.Text);

3.自定义function
procedure TForm1.Button1Click(Sender: TObject);
var
t:string;
begin
t:=inputbox('输入数字','请输入a、b 、c' ,'a');
edit1.Text:='你输入的是:' + t;
edit2.Text:=func(t);
end;

function func(m:string):string;
begin
  if m='a' then
  begin
    Result:='你应该输入a';
  end else

  if m='b' then
  begin
    Result:='你应该输入b';
  end else

  begin
    Result:='你应该输入c';
  end;
end;

需要在公共变量区域下定义
function func(m:string):string;


3.每隔3秒做一件事情,需要一个timer控件,设置interval=3000,然后 enabled:=false

按下按扭,则将timer1.enabled:=true;

则在按下的同时,就会自动每隔3秒重复做一件事情

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    edit1.Text:='a';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

4.连接某个地址 存在假死可能
procedure TForm1.Button1Click(Sender: TObject);
var
mystr:string;
url:string;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;
try
url:=edit2.text;
mystr:=idhttp1.Get(url);
except
  showmessage('error!');
  exit;
end;
  showmessage(mystr);
end;

5.多线程研究
Application.ProcessMessages; 用在比较费时的循环中,会检查并先处理消息队列中的其他消息。

用的不多,在拖动的过程中,循环会暂停。


A:多线程第一个例子。
function MyFun(p:Pointer):integer;stdcall;
procedure TForm1.Button1Click(Sender: TObject);
var
ID:THandle;
begin
  CreateThread(nil,0,@MyFun,nil,0,ID);
end;

function MyFun(p:Pointer):integer;stdcall;
var
i:integer;
begin
  for i:=0 to 500000 do
  begin
    form1.Canvas.lock;
    form1.Canvas.TextOut(10,10,inttostr(i));
    form1.Canvas.Unlock;
  end;
  Result:=0;
end;

B:多线程第2个例子
 TMyThread=class(TThread)
  Protected
    procedure Execute;override;
  end ;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMYThread.Execute;
var
i:integer;
begin
FreeOnTerminate:=true;  //线程执行完毕后随即释放
for i:=0 to 500000 do
begin
  form1.Canvas.Lock;
  Form1.Canvas.TextOut(10,10,inttostr(i));
  form1.Canvas.Unlock;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  TmyThread.Create(false);   //创建线程
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ExitThread(0);   //退出线程
end;

C:CreateThread 记录

function CreateThread(
 
lpThreadAttributes: Pointer;           {安全设置}
 
dwStackSize: DWORD;                    {堆栈大小}
 
lpStartAddress: TFNThreadStartRoutine; {入口函数}
 
lpParameter: Pointer;                  {函数参数}
 
dwCreationFlags: DWORD;                {启动选项}
 
var lpThreadId: DWORD                  {输出线程 ID}

): THandle; stdcall;                     {返回线程句柄}

 


6.delphi 字符串数组分割
type
userarray:array of string;

字符类,如果包含有中文。将pos 换成 ansipos即可
function split(s:string;dot:char):userarray;
var
str:userarray;
i,j:integer;
begin
  i:=1;
  j:=0;
  setlength(str,255);
  while Pos(dot,s)>0 do
    begin
      str[j]:=copy(s,i,pos(dot,s)-i);
      i:=pos(dot,s)+1;
      s[i-1]:=chr(ord(dot)+1);
      j:=j+1;
    end;
      str[j]:=copy(s,i,strlen(pchar(s))-i+1);
      result:=str;
end;


7.delphi 获取当前时间

var
dt:TdateTime;

begin
 dt:=Time();
 button1.caption:=timetostr(dt);
end;


8:delphi 获取自身窗口标题

var
  p: PChar;
begin
  p := StrAlloc(256);
  GetWindowText(Handle, p, StrBufSize(p));
  ShowMessage(p); {Form1}
  StrDispose(p);
end;

9://获取 WINDOWS 所在目录
var
  buf: array[0..MAX_PATH] of Char;
begin
  GetWindowsDirectory(buf, Length(buf));
  ShowMessage(buf); {C:\WINDOWS}
end;

10://获取系统目录
var
  p: PChar;
begin
  p := PChar(StringOfChar(Char(0), 256)); {反复一个空字符 256 次成一个字符串, 然后转为

PChar}
  GetSystemDirectory(p, StrBufSize(p));
  ShowMessage(p); {C:\WINDOWS\system32}
end;


11://设置窗口标题
var
  p: PChar;
begin
  p := '窗口新标题';
  SetWindowText(Handle, p);
end;

12.delphi与mssql 数据库的datetime 数据类型

将delphi 的Tdatetime 类型 datetimetostr(dt) 后可以插入 mssql 的DateTime 列
connQueryt.Close;
connQueryt.Sql.add('insert into tester(dts) values ('''+datetimetostr(dtp3)+''')');
connQueryt.execSQL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3cts

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值