onkeypass
or 
onmousedown
事件。

解决方案 »

  1.   

    form.keypreview := true
    然后onkeypass
      

  2.   

    如果用代码方式不好解决,那就换个思路吧,比如说用Flash来做,转成avi,在Form中播放。
      

  3.   

    采用定时器实现滚动,采用双缓冲在Form上画就会很平滑了。
      

  4.   

    //from
    http://kingron.myetang.com/zsfunc0f.htm(*//
    标题:判断是否完成一系列按键操作
    说明:示例按键彩蛋
    设计:Zswang
    日期:2002-01-25
    支持:[email protected]
    //*)///////Begin Source
    function IsSeriesKey(var nIndex: Integer; mShortCuts: array of TShortCut;
      mShortCut: TShortCut): Boolean; { 返回是否完成一系列按键操作 }
    begin
      Result := False;
      if (nIndex >= Low(mShortCuts)) and (nIndex <= High(mShortCuts)) then begin
        if (mShortCuts[nIndex] = mShortCut) then
          Inc(nIndex)
        else nIndex := 0;
        Result := nIndex > High(mShortCuts);
        if Result then nIndex := 0;
      end;
    end; { IsSeriesKey }
    ///////End Source///////Begin Demo
    { uses Menus }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      KeyPreview := True;
    end;procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    {$J+}
    const
      vIndex: Integer = 0; //可修改类型常量(静态变量)适用Delphi6.0
    {$J-}
    begin
      if IsSeriesKey(vIndex, [
        TextToShortCut('Ctrl+z'),
        TextToShortCut('Ctrl+s'),
        TextToShortCut('Ctrl+w'),
        TextToShortCut('Ctrl+a'),
        TextToShortCut('Ctrl+n'),
        TextToShortCut('Ctrl+g')],
        ShortCut(Key, Shift)) then
        ShowMessage('Hello World!');
    end;
    ///////End Demo
      

  5.   

    //-----我的程序---unit AboutFlash;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;type
      TFrmFlash = class(TForm)
        Timer1: TTimer;
        BtnXiXi: TButton;
        Image1: TImage;
        Memo1: TMemo;
        procedure Timer1Timer(Sender: TObject);
        procedure BtnXiXiClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure Image1DblClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FrmFlash: TFrmFlash;implementation
    var
      MaxTxtHeight, Y: Integer;{$R *.DFM}procedure TFrmFlash.Timer1Timer(Sender: TObject);
    var
      I: Integer;
      TxtLinePosY: Integer;
    begin
      Image1.Canvas.FillRect(Image1.ClientRect);
      TxtLinePosY := Y;
      for I := 0 to Memo1.Lines.Count - 1 do begin
        Inc(TxtLinePosY, MaxTxtHeight);
        if (TxtLinePosY < -MaxTxtHeight) or (TxtLinePosY > Image1.ClientHeight) then
        Continue
        else begin
          Image1.Canvas.TextOut(0, TxtLinePosY, Memo1.Lines[I]);
          //image1.Refresh;
        end;
      end;
      Dec(Y);
      if Y < -Memo1.Lines.Count * MaxTxtHeight then
      Y := Image1.ClientHeight;
    end;procedure TFrmFlash.BtnXiXiClick(Sender: TObject);
    begin
      DoubleBuffered := True; //for Delphi6
      with Image1 do begin
        Transparent := True; //可以加个背景
        //canvas.font.Charset:=GB2312_CHARSET;
        //canvas.font.Name:='宋体';
        canvas.font.Size:=7;
        canvas.Font.Color:=clBlue;
        MaxTxtHeight := Image1.Canvas.TextWidth('gh');
        Y := Image1.ClientHeight;
      end;
      Timer1.Interval := 5;
      Timer1.Enabled := True;end;procedure TFrmFlash.FormShow(Sender: TObject);
    begin
      BtnXiXiClick(BtnXiXi);
    end;procedure TFrmFlash.Image1DblClick(Sender: TObject);
    begin
      self.Close;
    end;end.