皮皮网

【源码下载音乐推荐】【独家修复版起名网站源码】【阿里健康买下了药品溯源码】delphi tlist源码

2024-11-27 11:35:27 来源:查询引擎源码技术

1.delphi 如何利用循环创建多个不同的Timage。
2.Delphi 多线程的一个代码如何写
3.delphi的TList,TStringList,TObjectList的区别和联系

delphi tlist源码

delphi 如何利用循环创建多个不同的Timage。

       imglist:TList;//存放image的容器

       Procedure intiImage;//动态创建Timage的过程;

       //创建timage;

       var

       img1:TImage;

       widthimg1,源码下载音乐推荐heightimg1,colimg1,rowimg1,col,row,i:Integer;

       widthLength,heightLength:Integer;

       begin

        colimg1:=;// Image的列数

        rowimg1:=;// Image的行数

        widthimg1:=;// Image的宽

        heightimg1:=;// Image的高

        //Image与Image之间的间隔在宽

        widthLength:=(pnl1.ClientWidth-widthimg1*colimg1) div (colimg1+1);

        //Image与Image之间的间隔在高

        heightLength:=(pnl1.ClientHeight-heightimg1*rowimg1)div (rowimg1+1);

        imgList:=TList.Create;

        for I := 0 to colimg1 * rowimg1-1 do

        begin

        img1:=TImage.Create(Self);

        col:= i mod colimg1;

        row:= i div colimg1;

        img1.Left:=col * widthimg1+(col+1)*widthLength;

        img1.Top:=row * heightimg1+(row+1)*heightLength;

        img1.Width:=widthimg1;

        img1.Height:=heightimg1;

        // img1.Picture.LoadFromFile('C:\image\1.jpg');//这个应该写在imgClick事件中

        img1.OnClick:=imgClick;//imgClick事件是自定义的

        img1.Parent:=pnl1;

        imgList.Add(img1);

        end;

       end;

       //仅供参考

Delphi 多线程的一个代码如何写

       å‰å‡ å¤©åˆšå¥½æœ‰ä¸ªå®¢æˆ·å«æˆ‘用DELPHI帮忙写个线程例子,给你看看

       //主窗体

       unit Unit1;

       interface

       uses

        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

        Dialogs, StdCtrls;

       type

        TForm1 = class(TForm)

        Button1: TButton;

        Memo1: TMemo;

        Button2: TButton;

        Edit1: TEdit;

        Label1: TLabel;

        procedure FormCreate(Sender: TObject);

        procedure Button1Click(Sender: TObject);

        procedure Button2Click(Sender: TObject);

        procedure FormClose(Sender: TObject; var Action: TCloseAction);

        private

        { Private declarations }

        public

        { Public declarations }

        end;

       var

        Form1: TForm1;

        //线程列表,和Tlist差不多,多了一些多线程同步处理方法

        GvThreadList : TThreadList;

       implementation

       uses Unit2;

       { $R *.dfm}

       procedure TForm1.FormCreate(Sender: TObject);

       begin

        GvThreadList := TThreadList.Create;

        Label1.Caption := '线程数:';

        Button1.Caption := '创建';

        Button2.Caption := '停止';

       end;

       procedure TForm1.Button1Click(Sender: TObject);

       var

        i,ICount : Integer;

        MyLIst : TList;

        MyRcThread : RcThread;

       begin

        ICount := StrToInt(edit1.Text);

        //这里不用MyList也一样,可以直接用GvThreadList.Add(P),让学习者有个LockList方法

        MyList := GvThreadList.LockList;

        for i :=0 to ICount-1 do

        begin

        MyRcThread := RcThread.Create(false,memo1,'线程编号:'+IntTostr(i));

        //将所创建的线程添加到列表中,方便管理

        MyList.Add(MyRcThread);

        end;

        GvThreadList.UnlockList;

       end;

       procedure TForm1.Button2Click(Sender: TObject);

       var

        i : integer;

        MyLIst : TList;

        MyRcThread : RcThread;

       begin

        //多个地方同时访问一个列表时,可以用ThreadList的线程锁方法(临界),避免多线程访问变量导致变量取值出错

        MyList := GvThreadList.LockList;

        for i := 0 to Mylist.Count -1 do

        begin

        MyRcThread:=MyList[0];

        MyRcThread.Terminate;

        Mylist.Delete(0);

        end;

        MyList.Clear;

        //解锁

        GvThreadList.UnlockList;

       end;

       procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

       begin

        Button2.Click;

        GvThreadList.Free;

       end;

       end.

       //线程单元

       unit Unit2;

       interface

       uses

        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

        Dialogs, StdCtrls;

       //定义线程,简单的举例如何创建/调用线程,

       type

        RcThread = class(TThread)

        private

        procedure RefreshMainForm;

        public

        MyCount: integer ;

        MyThreadTally : string;

        Mymemo : Tmemo;

        //创建参数:线程是否挂起,MEMO,线程标记

        constructor Create(CreateSuspended:Boolean;memo:Tmemo;ThreadTally:String);reintroduce;

        destructor Destroy(); override;

        protected

        procedure Execute(); override;

       end;

       implementation

       uses Unit1;

       { RcThread }

       //创建

       constructor RcThread.Create(CreateSuspended: Boolean;memo:Tmemo;ThreadTally:String);

       begin

        MyCount := 0;

        Mymemo := memo;

        MYThreadTally :=ThreadTally;

        inherited Create(CreateSuspended);

       end;

       //释放

       destructor RcThread.Destroy;

       begin

        MyMemo.Lines.Add(MyThreadTally+'释放');

        inherited;

       end;

       //执行

       procedure RcThread.Execute;

       begin

        while True do

        begin

        //停止,可以根据自己要判断的条件去判断(if....then break;)

        if (self.Terminated = true) then

        Free;

        //线程每豪秒执行一次,以免过多占用CPU

        sleep();

        //同步

        Synchronize(RefreshMainForm);

        end;

       end;

       procedure RcThread.RefreshMainForm;

       begin

        //简单举例,往传递的MEMO中写当前线程执行了第几次

        Inc(MyCount);

        Mymemo.Lines.Add(MyThreadTally+' 执行第'+IntToStr(MyCount)+'次');

        Application.ProcessMessages;

       end;

       end.

delphi的TList,TStringList,TObjectList的区别和联系

       ä¸åŒäºŽTList类,TObjectList类的Add, Remove, IndexOf, Insert等方法都需要传递TObject对象作为参数,由于有了编译期的强类型检查,使得TObjectList比TList更适合保存对象。此外TObjectList对象有OwnsObjects属性。当设定为True (默认值),同TList类不同,TObjectList对象将销毁任何从列表中删除的对象。无论是调用Delete, Remove, Clear 方法,还是释放TObjectList对象,都将销毁列表中的对象。有了TObjectList类,我们就再也不用使用循环来释放了对象。这就避免了释放链表对象时,由于忘记释放链表中的对象而导致的内存泄漏。 另外要注意的是OwnsObjects属性不会影响到Extract方法,TObjectList的Extract方法行为类似于TList,只是从列表中移除对象引用,而不会销毁对象。

       ã€€ã€€åœ¨TstringList里,那些String被一行一行地储存。 TstringList.Text返回全部的String。如果第一、二、三行分别是\'aa\'、\'bb\'、\'cc\' 的话,那么Text 返回的是“\'aa\'+##+\'bb\'+##+\'cc\'+##” (不包括双引号)。所有的String都被TstringList用回车和换行符(##)连接了起来。如果依次向Text赋值的话,Text就会 被自动地分割成行储存在TstringList 里。这充分地体现出TstringList的一个很实用的价值:它能让我们逐行处理String。假如我们要操作第4行,只需操作 TstringList[3]。相信大家会问,TstringList明明是一个类,为什么能当数组那样子用呢?其实,我们在写 TstringList[3]的时候,就是在写TstringList.Strings[3]。Strings是TstringList的一个缺省属性。 数组性的缺省属性就是这样子使用的。如果大家在编写类的时候要用到这么一个功能的话,可以参照如下方法:

       ã€€ã€€property AProperty[I: Integer] read *** write ***;

       ã€€ã€€default;。

       ã€€ã€€Strings 是一个可读写的属性。这也就是说,大家不仅可以获得第N 行的内容,也可以改变第N 行的内容。因此我们需要知道TstringList 里S t r i n g 的总行数。TstringList的属性Count则可以满足我们的需要。

       ã€€ã€€ä¸Šé¢å·²ç»è¯´è¿‡ï¼ŒText是一个返回所有字符串的属性。向Text赋值 时,TstringList能够自动地把Text分成一行一行的,然后储存在TstringList里(当然,TstringList里面并不完全是这么 储存的,详细过程建议看TstringList和TStrings的代码)。这样,Strings返回的字符串就是没

       ã€€ã€€æœ‰å›žè½¦å’Œæ¢è¡Œçš„。但是,如果我们向Strings赋值的字符串有回车和换行,那 么会出现什么情况呢?此时,Strings就会把那个字符串断成几行,插入到原来的位置上。如果TstringList只有这么些功能的话,那我就不必专 门拿出来讲了——我是说,TstringList能让我们任意

       ã€€ã€€åœ°æ’入或删除某行,这就要用到TstringList提供的方法。

       ã€€ã€€function Add(const S: string): Integer;

       ã€€ã€€procedure Append(const S: string);

       ã€€ã€€Add方法向TstringList的末尾添加一行String(在这里和下面我们都假设输入的字符串没有回车和换行,否则String将被分割)。参数S 代表的是要插入的字符串的内容。Add的返回值代表了新的字符串在TstringList的位置——也就是最后一行的位置,即新的Count 减去一。

       ã€€ã€€Append 方法与Add 唯一不同的地方是没有返回值。

       ã€€ã€€procedure Insert(Index: Integer; const S: string);

       ã€€ã€€Insert方法向TstringList插入一行字符串。在Insert里,我们可以自由地选择字符串插入的位置。参数S 代表要插入的字符串的内容,Index 代表要插入的位置。

       ã€€ã€€procedure Delete(Index: Integer);

       ã€€ã€€Delete 方法删除某行字符串,我们同样可以自由地选择删除任意一行字符串。参数Index代表要删除的那一行字符串的位置。