菜鸟学delphi(大家都来交流) (0分)

  • 主题发起人 刘亚林
  • 开始时间

刀剑如梦

Unregistered / Unconfirmed
GUEST, unregistred user!
抓取单帧图片并保存:
procedure TFlashPlayFileFrm.CopySingleFrame

begin
FlashPlayFileFrm.ShockwaveFlash.Stop

CopyBitMap := TBitmap.Create

try
CopyBitMap.Width := FlashPlayFileFrm.ShockwaveFlash.Width

CopyBitMap.Height := FlashPlayFileFrm.ShockwaveFlash.Height

FlashPlayFileFrm.ShockwaveFlash.PaintTo(CopyBitMap.Canvas.Handle,0,0)

if SavePictureDialog.Execute then
CopyBitMap.SaveToFile(SavePictureDialog.FileName+'.bmp')

finally
CopyBitMap.Free

end

end;
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
刀发的东东是好东东啊~~收藏

“主题应该去掉(版主进来)这一段.我老早就看到此贴了,一直没有打开,就因为后面的(版主进来).”
已经改了:)
 

菜鸟西瓜007

Unregistered / Unconfirmed
GUEST, unregistred user!
我的名字就表示我的支持[:D]
学习中
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
呀呀呀~~谢谢大家支持啊~~55,刚写了一大段结果死机了……

下面讲结构类型。
它包括以下:集合类型,数组类型,记录类型,类类型,类引用类型,文件类型,接口类型。
先讲集合类型。

定义方法:set of basetype.
举个例子吧,呵呵,你一看就明白了。

type
Tint=set of 0..255;
Tday=set of (mon,tue,wed,thu,fri);
var
intset:Tint;
dayset:Tday;
begin
intset:=[1,2,8,10];//注意了,必须要用这个东东赋值哦,要不然你的intset里面将是空空的哦。
 dayset:=[mon,thu];
end;

当然也可以这样定义:
var
intset:set of 0..255;
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
集合的运算符:
  1.关系运算:in判断一个给定的元素是否在一个集合中。这个简单吧,^^
if 200 in intset then ..
2.增删元素:include()和exclude();+和-。
include(intset,256);//这样以来,intset里就多了一个数256了。
   exclude(intset,2);//intset里删掉了一个数2。
   它们分别对应于以下:
   intset:=intset+[256];
intset:=intset-[2];
3.交集:*
下面的这个例子常用来检验一个集合中是否有某几个元素:
   if ['a','b'] * charset = ['a','b'] then..
好,集合讲完了。下课。
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
 希望更多的人来这儿,黎黎,看看有没有要补充的。快点补,好让大家看全面。也让我多学点~呵呵
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
晕,我还是接着讲吧。
这节课我们讲数组类型。
定义方法:
type
Tarray = array[0..25] of integer;
var
myArray:Tarray;
当然我们可以这样定义:
var
myArray:array[0..25] of integer;
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
定义好了数组,剩下来的当然是为它赋值了。
for i:=0 to 25 do
myArray:=0;

多维数组的定义方式和赋值如下:
type
Ttable=array[0..25,0..100] of integer;
var
mytable:Ttable;
begin
for i:=0 to 25 do
for j:=0 to 100 do
mytable[i,j]:=0;
end;

 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
记录类型!
记录是程序可以访问的一群数据的集合。举例:
type
Tmyrecord = record
Name:string[20];
age:integer;
salary:double;
end;
var
myrecord,yourecord:Tmyrecord;

记录包含可以保存数据的域。每个域有一个数据类型。
当我们要访问一个记录里面的数据域时,这样:myrecord.Name:='刘亚林';

要为记录赋值可用如下程序:
with myrecord do
begin
name:='刘亚林';
  age:=21;
salary:=0.0;
end;

注意:
在程序里可将记录当作单一实体来操作。myrecord:=yourecord;
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
ok。差不多了。

看到了上面的那个string[20],你知道它是怎么一回事吗?
接下来让我回过头来学字符串类型吧。
字符串类型有:ansiString,ShortString,WideString
Pchar,PansiChar,PwideChar.
ansiString,这是Pasical缺省的字符串类型,它由AnsiChar字符组成。其长度无限制。
ShortString,长度限制在255个字符内。
WideString,功能上类似于ansiString,它由WideChar 字符组成。

说明:可以用编译开关$H将string类型定义为ansiString或者ShortString。
   当$H为负时,string变量是shortstring类型;当$H为正时,也即缺省状态下,string变量是ansistring类型的。
   特殊:如果在定义时指定了长度(最大在255个字符以内),那么就总是shortstring类型的了。如: var
name:string[20];//20个字符的shortstring字符串。
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
关于上面这三种字符串类型的详细说明如下:
  1.AnsiString类型:
     它是动态分配的并有自动回收功能,因为有这个功能,所以它有时被称为生存期自管理类型。它总以空字符null结束,这种类型是一个指向在堆栈中的字符串结构的指针。(这一段我也不怎么明白。不明白它的机制到底是怎么样的,大家如果有知道的,跟帖告诉我啊^^)
  2.shortString:
它的最大长度为256,也就是说在shortString中不能有大于255个的字符(因为在内存中,字符串就是一个字符数组,在字符串的第0个元素中存放着字符串的长度,紧跟其后的就是字符串本身)。
      注意:当用数组的下标来访问shortString中的一个特定字符时,如果下标的索引值大于声明时shortString的长度,则会得到假的结果或造成内存混乱(很严重哦^^)。     
  3.wideString:
它象ansistring一样是生存期自管理类型,它们都能动态分配,自动回收并且彼此能相互兼容。它与ansistring的不同主要有三个方面:
      (1).widestring由widechar字符组成。
      (2).widestring用SysAllocStrLen() API函数进行分配,它们与OLE的BSTR字符串相兼容。(晕,又一段不明白的了)
(3).widestring没有引用计数,所以将一个widestring字符串赋值给另一个widestring字符串时,就需要从内存中的一个位置复制到另一个位置。这使得它在速度和内存的利用上不如ansistring有效。
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
下面讲Pchar,Pansichar,Pwidechar。
它们由三种不同的字符组成。这三种类型在总体上跟Pchar是一致的。它们需要使用以null结束的字符串。Pchar是一个指向以null结束的字符串指针。与ansistring和widestring类型不同的是,Pchar的内存不是由object pasical自动产生和管理的,要用Object pasical的内存管理函数来为Pchar所指向的内存进行分配。
Pchar字符串的最大长度是4GB.

下面讲字符串的运算符。

+,concat():连接两个字符串。推荐使用+。举例:s1:='hello';
s2:='world';
s1:=s1+s2;
//或者用
                  s1:=concat(s1,s2);
 下面讲几个常用的用来处理字符串的过程和函数。
copy   返回一个字符串中的子字符串。
delete  在一个字符串中从一个指定位置起删除一定数目的字符。
insert 在一个字符串中插入一个字符串。
length 返回字符串的长度。
pos 返回一个子字符串在一个字符串中的位置,即索引值。


好了,我吃饭去了。打字真辛苦啊~~虽然用的是五笔。黎黎,加了你QQ了。

希望老鸟们帮忙指正和补充啊!

菜鸟们翘首期待中。
 
C

coolboyhd

Unregistered / Unconfirmed
GUEST, unregistred user!
看了,很适合我
希望楼主再接再厉
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
to coolboyhd:
  谢谢支持啦。
  欢迎常来这儿啊~,此帖每天更新直到讲完为止。(^^打广告了~~)
 
W

waterstone

Unregistered / Unconfirmed
GUEST, unregistred user!
我曾经是一只菜鸟,
也许我还是菜鸟,
我随时准备当菜鸟!
 

易健荣

Unregistered / Unconfirmed
GUEST, unregistred user!
如何读取BLOB字段(字符非图片)到DBgrid中显示出来!!!
兄弟请帮忙了!!先谢谢!
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
1.在Adoquery的sql里加:select BLOB from **。(其中**为你想要从中取BLOB字段的表)。
2.设置datasource和adoquery以及DBgrid关联。

不用谢了。大家相互学习。^^多谢支持啊,还搞不定的话,加我QQ啦
 
T

tlzcj

Unregistered / Unconfirmed
GUEST, unregistred user!
是否可以把他们放在一起然后打个包。
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
恩,这个建议很好呀~

等写完了再打吧^^谢谢支持了啊
 

刘亚林

Unregistered / Unconfirmed
GUEST, unregistred user!
咳,下面接着讲指针吧^^
希望大家还有耐心……

 指针类型,
 定义:
    指针类型的变量是指向内存空间的地址。
    type pointerName=^type。
例如:
type
P=^integer;//定义了一个指针类型为整型。
var
Pint:p;//pint就是一个整型指针啦~~
   pw:pointer;//pw被定义成了无类型指针。
a,b:integer;
begin
a:=3;
b:=2;
p:=@a;
writeln('a:=',P^);
b:=integer(pw^);
end;
……
要注意的是指针运算符:
  ^:如果在类型前面,如^integer就是说明一个指针类型,比如说是整型指针啊之类的
    如果在指针的后面,如这里的p^,就表示取P指向的地址里面的内容,象这里就是a的值,为3。
  @:在变量前,如这里的@a,求出变量的地址。
注意这里的那个无类型指针,pw。它可以指向任何类型的数据。但不可以直接将所指地址中的内容赋给其它类型变量,而是要经过类型转换。如这里的b:=integer(pw^);

其实,为了方便咱们使用,object pasical里面已经定义好好多标准指针了,我们可以直接使用它们:Pstring,Pansistring,Pcurrency等,都是以P开头的。
 
顶部