將窗口設為系統焦點,並獲得該窗口句柄。然後對該窗口進行操作。(30分)

  • 主题发起人 主题发起人 leway
  • 开始时间 开始时间
L

leway

Unregistered / Unconfirmed
GUEST, unregistred user!
如何將窗口設為系統焦點,並獲得該窗口句柄。然後對該窗口進行操作。請舉例說明。
例:
現有Form1,Form2,任意選重窗體,然後在選中的窗體上增加一個Label。
 
show?
showing?
 
班主來看看。
 
SetForegroundWindow
findwindow
 
不明白你什么意思。
 
有窗體form1,form2,form3,form4,........firmn;
程序運行態在form1上按button,然後在處於激活狀態的窗體上增加一個Label。
 
button事件中就可以知道是那个窗体了,在显示窗体的激活事件里加上你说的label.
还有,我觉得问题本身有一点问题,windows操作窗口都是通过句柄的,先得到句柄,
然后激活。
 
我把代碼貼出來,請指教。

form1.Button1Click(Sender: TObject)
var
lab:TLabel;
begin
lab:=tlabel.Create(self);
獲得系統焦點所在的窗體FormX;
lab.parent:= FormX;
lab.Transparent:=true;

end;
 
我的問題有些錯誤。
改成如下:
有多個窗體,我用鼠標點任意一個後,在被點的窗體上生成一個Label。
 

OnActivate事件中,用Assigned判断
 
影 子請說得詳細些。
 
那你在OnActivate事件里做增加Label的工作不就行了?
你说:“有窗體form1,form2,form3,form4,........firmn;
程序運行態在form1上按button,然後在處於激活狀態的窗體上增加一個Label。”
在Form1上按button,Form1不就成了激活状态了????
 
所以我說我的問題有些錯誤,我已經將問題修改了一下。在上面。
請繼續解答,謝謝!
 
在Activate事件里加。
with tlabel.Create(self) do
begin
visible := true;
top := 50;
left := 50;
caption := 'test';
Parent := self;
end;
 
不就是动态创建???
 
即使你的代码没有错误,激活的窗体也是Form1,FormX从何而来呢?
下面的代码你看看吧。


form1中//MainForm

uses unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
form2: TForm2;
begin
form2 := TForm2.Create(self);
form2.show;
end;

form2中
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
Lab: TLabel;
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
begin
if not Assigned(lab) then
lab:=tlabel.Create(self);
//«@µÃϵ½y½¹ücËùÔڵĴ°ówFormX;
//lab.parent:= FormX;
lab.parent:= self;
lab.Caption := 'label1';
lab.Transparent:=true;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(Lab);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
lab := nil;
end;

end.
 
誰的Activate事件。
 

TO:yeath
按照你的代码,如果窗体每失去焦点后被激活一次,就会创建一个Label,呵呵。[:)]
 
form2,form3,form4.....的OnActivate事件里。
 
那可以把对象保存起来,在创建新的之前判断不就行了。???
 
后退
顶部