delphi 跟随按钮/鼠标焦点自定定位并显示panel

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, cxControls, cxContainer, cxEdit, cxLabel, StdCtrls, Jpeg, DBClient, DB,
  Unit2, cxTextEdit, cxMaskEdit, cxDropDownEdit, AdvTouchKeyboard, dxBar,
  AdvStickyPopupMenu;

type
  TNotifyEvent = procedure(AOne, AAnother: Integer) of object;

type
  TForm1 = class(TForm)
    Panel2: TPanel;
    btn2: TButton;
    Button1: TButton;
    procedure btn2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Panel2.Hide;
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  pt: TPoint;
  aRect: TRect;
begin
  GetWindowRect(btn2.Handle, aRect);
  pt.X := aRect.Left;
  pt.Y := aRect.Top;
  pt := ScreenToClient(pt);

  Panel2.SetBounds(pt.X,pt.Y+btn2.Height,Panel2.Width,Panel2.Height);
  Panel2.BringToFront;
  Panel2.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel2.Hide;
  ShowMessage('显示我的自定义消息!');
end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi 7的TDBGrid的每一行中放置按钮,并在新增行时自动显示按钮,你可以使用TDBGrid的DrawColumnCell事件来实现。以下是一个简单的示例代码: 1. 首先,在TForm的私有部分声明一个TButton对象列表和一个布尔型的变量用于判断是否显示按钮: ```delphi private FButtons: TList; FShowButton: Boolean; ``` 2. 在Form的OnCreate事件中,初始化列表并设置FShowButton变量为False: ```delphi procedure TForm1.FormCreate(Sender: TObject); begin FButtons := TList.Create; FShowButton := False; end; ``` 3. 在TForm的OnDestroy事件中,释放按钮列表: ```delphi procedure TForm1.FormDestroy(Sender: TObject); var I: Integer; begin for I := 0 to FButtons.Count - 1 do TButton(FButtons[I]).Free; FButtons.Free; end; ``` 4. 编写TDBGrid的DrawColumnCell事件处理程序,在需要显示按钮的单元格中绘制按钮: ```delphi procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Button: TButton; begin if Column.Index = DBGrid1.Columns.Count - 1 then begin if FShowButton and (not (gdEditing in State)) then begin Button := TButton.Create(DBGrid1); Button.Parent := DBGrid1; Button.Left := Rect.Left + (Rect.Width div 2) - (Button.Width div 2); Button.Top := Rect.Top + (Rect.Height div 2) - (Button.Height div 2); Button.Caption := '按钮'; Button.OnClick := ButtonClick; FButtons.Add(Button); end; end; end; ``` 5. 编写按钮的点击事件处理程序: ```delphi procedure TForm1.ButtonClick(Sender: TObject); begin ShowMessage('按钮被点击了!'); end; ``` 6. 在需要显示按钮的时候,将FShowButton设置为True,并调用TDBGrid的Invalidate方法来重绘单元格: ```delphi procedure TForm1.btnAddRowClick(Sender: TObject); begin FShowButton := True; DBGrid1.Invalidate; end; ``` 通过以上步骤,你就可以在TDBGrid的每一行中放置一个按钮,并在新增行时自动显示按钮。在点击按钮时,会触发相应的事件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值