网上找不到这方面的资料,结果虽然有多年delphi开发经历,笔试题目还是答不出来。
笔试考得很底层,诸如内存回收,不知道哪里可以找到Delphi的常见面试问题、解答?

解决方案 »

  1.   

    Delphi试题51道
    1.dbExpress组件访问数据库是通过哪种方式与特定的数据库连接的?(C)
    A. BDE
    B.其他三项都不是
    C.DbExpress自己的数据库连接DLL
    D.ODBC
    2.在try语句中使用多个except语句可以处理多个不同的异常情况。(A)
    A.错误
    B.正确
    3.DWORD,UINT,HResult以及WinAPI函数中各种Handle等于Delphi6中的哪种数据类型?( A)
    A.LongWord
    B.UnsignedInt
    C.LongInt
    D.Word
    4.窗体上放置有一个TPanel类的控件Panel1,并定义了Panel1的OnEnter事件,下面说法正确的是:(C)
    A.当鼠标移动到Panel1上面时产生Panel1OnEnter事件
    B.其他三项都不对
    C.当Panel1获得焦点时产生Panel1OnEnter事件
    D.当鼠标在窗体上移动时产生Panel1OnEnter事件
    5.下面关于数据集BookMark的说法那个是正确的?(A)
    A.BookMark类型的变量是一个对象指针,需要用BookMark Create来建立BookMark,用BookMark.free来释放
    B.BookMark本质上是一条记录类型,无须建立和释放
    C.Delphi中,一个数据集组件只能建立一个书签BookMark
    6.所有类都有Name属性(A)
    A.错误
    B.正确
    7.一个Delphi窗体Form1中包含了一个Tbutton类的Button1控件,下面代码,将产生怎样的结果?(D)
    ……
    Tform1.button1Click(Sender);
    begin
    Self.Caption:=’self’;
    Self.Color:=ClBlue;
    EventX(Sender);
    end;
    Tform1.EventX(Sender:TObject);
    begin
    Sender.Tag:=10;
    end;
    A.窗体的标题为Self,颜色为蓝色,窗体的Tag属性等于10
    B.Button1的标题为Self,颜色为蓝色,Tag属性等于10
    C.Button1的标题为Self,颜色为蓝色,窗体的Tag属性等于10
    D.窗体的标题为Self,颜色为蓝色,Button的Tag属性等于10
    8.在多个应用程序访问同一个DLL时,下面关于DLL中使用全局变量的说法哪个是正确的?(C)
    A.每个应用程序都各自使用在他自己的进程空间内复制的一份该全局变量
    B.全局变量在DLL中是不允许使用的
    C.每个应用程序访问的是同一个全局变量,该全局变量的有引用计数。
    9. 窗体上放置有一个TEdit类控件Edit1,当在Edit1中按下‘A’键时触发的事件和事件顺序是:(OnKeyPress->OnKeyDown)可以自己试一下
    A.OnKeyDown->OnKeyPress->OnKeyUp
    B.OnKeyDown->OnKeyUp
    C.OnKeyPress
    D.OnKeyDown->OnKeyUp->OnKeyPress
    10.下面方法中,哪个是正确的移动TDataSet的记录光标位置的方法?(A)
    A .(Sender As TDataSet).Moveby(10)
    B.(Sender As TDataSet).Moveto(10)
    C.(Sender As TDataSet).Move(10)
    D.(Sender As TDataSet).MoveToCursor(10)
    11.关于记录与类的说法错误的是:(C)
    A.记录没有继承关系,而类有
    B.不能自动对记录的域初始化
    C.类可以使用with语句而记录不能
    D.记录没有任何保密性,所有细节从外部都是可见的,或者说是公用的。
    12.以下不合法的数组是:(A)
    A.arr:Array of Class
    B.arr:Array of TButton
    C.arr:Array of byte
    D.arr:Array of string
    13.下列关于dfm文件的一些说明哪个是正确的?(C)
    A.dfm文件中包含了对应Pascal单元文件的编译后中间代码
    B.dfm文件是文本文件,用于保存编译器需要用到的Pascal文件的符号表
    C.dfm文件保存着一个窗体和窗体拥有的对象的Published属性
    D.dfm文件是编译时产生的符号表,是为了使优化提高编译速度而产生的。
    14.请判断下列代码在程序关闭时,正确的对象释放顺序(B)
    TMybutton=class(Tbutton)
    Protected
    Destructor Destroy;override;
    End;
    ………….
    destructor TMyButton.Destroy;
    Begin
    inherited;
    Application.MessageBox(PChar(Name),’Destroy’,mb_ok);
    end;
    var AButton,BButton:TMyButton;
    procedure TForm1.FormCreate(Sender:TObject);
    begin
    Abutton:=TmyButton.Create(Nil);
    With AButton do
    begin
    Parent:=form1;
    Top:=100;
    Left:=100;
    Visible:=True;
    Name:=’ABtn’;
    end;
    BButton:=TMyButton.Create(Application);
    With BButton do
    begin
    Parent:=Form1;
    Top:=100;
    Left:=200;
    Visible:=True;
    Name:=’BBtn’;
    end;
    procedure TForm1.FormDestroy(Sender:TObject);
    begin
    ……
    end;
    A.BButton.Destroy->Form1.Destroy->AButton.Destroy
    B.上述都不对,应该手工调用Abutton.free,否则会造成AButton没有释放的错误
    C.Form1.Destroy->AButton.Destroy->BButton.Destroy
    D.AButton.Destroy->Form1.Destroy->BButton.Destroy
    15.已知有说明var s:sting;下列程序段中的错误为:
    case s of
    ‘book_A’:processSelectionA; 
    ‘book_B’:processSelectionB; 
    ‘book_C’:processSelectionC;
    end; ()
    A.用字符串作为Case值表元素
    B.case表达式中有常数
    C.case常量和case值表元素
    D.case表达式位关系表达式
    这道题我不知道它要说什么……Case String of 这个语法本身就是错误的!
    Case … of 中间的条件只能是整型,集合,枚举类型
    16.“工程选项对话框”中,当默认的checkbox位True时,会出现下面那种情况?(D)
    A.Delphi把所有的工程选项都重置为最初的默认值
    B.“工程选项“值覆盖“环境选项”值
    C.当前被选页上所有checkbox的属性都自动变成为True
    D.当前的工程选项作为新创建的工程的默认值
    17.XML的含义是什么?(B)
    A.Express Manage Language
    B.Extensible Markup Language
    18.下面关于单元的初始化Initialization部分的说法哪一个是正确的?(B)
    A.如果调用了Initialization,必须调用Finalization
    B.该部分代码单元被其他单元或程序引用时就会自动运行
    C.这部分代码与单元中的FormCreate事件的作用是相同的
    D.初始化部分的代码只能在单元中有OLE和COM对象时才有效
    19.以下关于Redcord(记录)的描述,不正确的是:(B)
    A.Object Pascal支持可变Record,它允许在记录种不同的数据共同覆盖相同的内存(这个概念与C/C++中的union概念一样)
    B.Record类型定义中列出了若干个域,每个域对应一个域名,通过域名访问
    C.Record类型用于定义不同类型数据项的固定集合
    D.record类型是类的一种补充
    20.在每一个枚举类型中,默认编译的情况下,我们最多只能定义(D)个值。
    A.64
    B.512
    C.128
    D.255
      

  2.   

    21.用于建立菜单项的下划线快捷方式的字符是:(C)
    A.^
    B.#
    C.&
    D.@
    22.下列关于Variant类型的说法哪个是不正确的?(A)
    A.variant类型的变量被动态赋值为一个特定的数据类型后,不能再赋值为一个其它的数据类型
    B.variant类型变量是无类型变量
    C.variant类型是以前Borland C++ 中固有的Variant类型的模仿
    D.variant类型无需进行释放,回收内存
    23.关于Application对象和属性的描述正确的是:(B)
    A.ExeName可读可写
    B.Active表明应用程序是否激活,可以设置该值来激活程序
    C.Title属性设置主程序窗口的标题
    D.只有给予窗体的应用程序才有全局Application对象,控制台没有Application对象
    24.下列哪种变量类型不能作为For循环中的循环变量?(D)
    A.字符
    B.枚举
    C.子界
    D.实数
    25.下面是一个用户自定义的消息,哪一种消息定义是正确的?(D)
    A.WM_MyMessage=User_Base+100
    B.WM_MyMessage=CM_Base+100
    C.WM_MyMessage=WM_Base+100
    D.WM_MyMessage=WM_USER+100
    26.请看代码,回答下面的问题。
    Type
    TMammal=Class
    Procedure Walk;
    …..
    end;{end of TManmml}
    procedure TMammal.Walk;
    begin
    ShowMessage(‘Result is Mammal Walk’);
    end;
    TDog=Class(TMammal)
    Procedure Walk;
    end;
    procedure TDog.Walk;
    begin
    ShowMessage(‘Result is Dog Walk’);
    end;
    var 
    Mammal:TMammal;
    dog:TDog;
    begin
    Mammal:=TDog.Create;
    Mammal.Walk;
    Mammal.Free;
    end;
    上面代码中,最后的输出结果是:(B)
    A.‘Result is Dog Walk’
    B.‘Result ia Mannal Walk’
    27.注册一个自定义组件语句的用法是:(C)
    A.RegisterComponents(TMyComponent,[‘Standard’])
    B.Register(TMyComponent,[‘Standard’])
    C.RegisterComponents(‘Standard’,[TMyComponent])
    D.Register(‘Standard’,TMyComponent)
    28.dbExpress只提供单向游标,这意味着dbExpress类的数据及组建不允许做编辑、修改、删除这样的操作,是否正确?(B)
    A.是
    B.否
    29.窗体上放置有一个TEdit类的控件Edit1,并定义了Edit1的OnEnter事件,下面说法正确的是:(C)
    A.当鼠标在窗体上移动时产生Edit1OnEnter事件
    B.其他三项都不对
    C.当Edit1获得焦点时产生Edit10Enter事件
    D.当鼠标移动到Edit1的上面时产生Edit1OnEnter事件
    30.dbExpress是一个独立的数据库接口层,它可以工作于Windows和Linux平台下吗?(A)
    A.是
    B.否
    31.所有可视化的VCL控件都是从哪一个基类派生而来的?(A)
    A TControl
    B TWidgetControl
    C TWinControl
    D TwindowControl
    32.dbExpress是Borland多层数据库概念的延伸和发展,同TClientDataSet类组件一样,TSQLDataset同样提供了数据的本地缓冲机制,是否正确?(B)
    A.否 B.是
    33.表达式Writeln(‘This is ‘#39’xxx#39string’)的结果是:(B)。
    A.This is xxx sstring
    B.this is ‘xxx#39string
    C.This is ‘’’xxx’string
    D.This is ‘xxx’string
    34.集合类型的数据大小是:(A)
    A.0..255
    B.0..65535
    C.0..63
    D.0..31
    35.关于CLX以下说法不正确的是:(A)
    A.CLX是在VCL的基础上开发的,而非重新开发的
    B.CLX是伴随着LINUX问世的
    C.CLX的含义就是跨平台类库
    D.VCL的代码不可以直接移植到CLX
    36.Windows的消息系统中的消息来源可分为:(B)
    A.硬件消息,应用程序消息
    B.应用程序消息,硬件消息,Windows系统的窗口管理消息
    C.用户自定意消息,Windows系统的窗口管理消息、
    D.硬件消息,Windows系统的窗口管理消息
    37.TPersistent类的用途是什么?(C)
    A.作为DLL接口的基类,因为DLL不能自动被加载
    B.可以完成Windows控件的封装
    C.是所有用来保存和加载Delphi对象流的类的基类
    D.所有Delphi的类都从它派生而来
    38.下面三个类型转换操作中,哪一句是不正确的?(A)
    Procedure Tform1.AbuttonClick(Sender:TObject);
    Begin
    ………
    end; 
    A.(Sender is TButton).Caption:=’Button’
    B.TButton(Sender).Caption:=’Button’
    C.(Sender As TButton).Caption:=’Button’
    39.在设计一个MDI应用程序时,假设主窗体的Name是MainForm,而子窗体的定义是Child:TChildForm,那么应该采取下面哪种方法来生成子窗体?(A)
    A.Child:=TChildForm.Create(Nil)
    B.Child:=TChildForm.Create(TApplication)
    C.Child:=TChildForm.Create(MainForm)
    D.Child:=TChildForm.Create(TMainform)
    40.有关Assigned的说法哪个是正确的?(C)
    A.其他三项都不对
    B.Assigned的作用是判断一个对象是否为Nil,如果是Nil,返回True,如果不是Nil,返回False
    C.Assigned的参数可以是对象或者方法,或者是一个指针
    D.Assigned的作用是判断Assign过程是否已经完成。
    41、在修改数据前检查TQuery组件的状态,发现处于浏览(daBrowse)状态,该TQuery组件的 Active 属性的值已经为真,则调用该TQuery组件的Edit方法可以将其状态该为可修改。
    42、在当前Form上添加一个TActionList组件(已添加),选择一个“TEditCopy”标准动作添加到TActionList组件中。
    43、将默认路径下的BrowseFolder.pas组件安装在Delphi IDE的默认的package中。
    44、调用TQuery组件的Prepare方法让BDE和远程的数据库服务器为查询分配资源并执行一些优化操作,称为执行查询前的准备工作。因为执行这个查询的准备工作会消耗一定的资源,所以在完成查询以后应该调用TQuery组件的 UnPrepare 方法来释放分配给查询的资源。
    45、数据集TQurey要执行如下SQL语句:select * from mytable
    请补充完成程序中横线所缺少的语句:
    var
    Query1:TQuery;
    ……
    begin
    with Query1 do
    begin
    Close;
    Clear;
    SQL.Add(‘select * from mytable’);
    Open;
    end;
    end;
    46、下面语句用来删除TMemo组件的第2行,请补充完整:
    Memo1.Lines.delete( 1 );
    47、调用函数 IntToStr 实现整型数字到文本字符串的转换。(只写出括号前的函数名称)
    48、完成下列要求:
    (1)自定义一个过程类型TGetPropProc,该类型有一个参数Prop,类型为IProperty
    (2)定义一个类TPropertyEditor,该类有一个过程GetProperties,该过程有一个参数,参数类型为TgetPropProc,请写出有关代码。
    (3)在Uses中写出所使用的单元。
    备注:请从下面两种结构中选择一种,并添加具体的代码。
    (1)控制台结构
    program Project1;
    {$APPTYPE CONSOLE}
    uses
    SysUtils;
    beginend.
    (2)单元结构
    unit Unit1;
    interface
    uses
    DesignEditors,DesignIntf;
    type
    TGetPropProc=procedure(const Prop:Iproperty)of Object;
    TPropertyEditor=class(TBasePropertyEditor,Iproperty)
    Public
    Procedure GetProperties(Proc:TGetPropProc);
    end;
    implementation
    procedure TPropertyEditor.GetProperties(Proc:TGetPropProc);
    begin
    end;
    end.
    49、在下面代码的基础上,声明一个函数常量,并将函数常量的指针指向函数Calc。
    备注:请在下面结构中添加具体的代码。
    Program project1;
    {$APFTYPE CONSOLE}
    uses
    SysUtils;
    function Calc(x,y:integer):integer;
    begin
    Calc:=x+y;
    end;
    type
    Tfunction=function(x,y:integer):integer;
    const
    MyFunction:Tfunction=Calc;
    begin
    write(MyFunction(2,3));
    readln;
    end.
    50、编写实现一个DLL。该DLL中有一个输出函数function ChangeColorWordToInt(ColorName : PChar):TColor;stdcall;可以将字符串按下表转换为对应的颜色,并返回该颜色值:Red->CLRed;Blue->CLBlue;Lime->CLLime;Other->CLBlack。
    一点提示:用StringToColor 和 ColorToString
    51、编一个显示和隐藏任务栏的应用程序,它有两个按钮分别用来显示和隐藏任务栏。
    var
    taskbarWnd:THandle;
    ….
    begin
    taskbarWnd := FindWindow('shell_traywnd',nil);
    ShowWindow(taskbarWnd,sw_Hide); //隐藏
    ShowWindow(taskbarWnd,sw_Restore); //显示
    end;