Фокусы на форме

  • Автор темы GOsha
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

GOsha

Гость
#1
Есть форма... Ее нужно закрыть, как только она становится неактивной. Но есть маленькая проблема.... КАК???
И как проверить, есть ли курсор в поле Memo.
Пасиба...
 
Z

zubr

Гость
#2
Есть форма... Ее нужно закрыть, как только она становится неактивной. Но есть маленькая проблема.... КАК???
Можно создать поток проверяющий, является ли окно программы самым верхним:
Код:
unit Unit1;

interface

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

type
TLeasenThread=class(TThread)
private
 Fhw:cardinal;
protected
 Procedure Execute; override;
 procedure CompareHw;
end;

TForm1 = class(TForm)
 procedure FormCreate(Sender: TObject);
 procedure FormDestroy(Sender: TObject);
private
 { Private declarations }
public
 { Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.DFM}

var
lsn:TLeasenThread;

Procedure TLeasenThread.Execute;
begin
repeat
Fhw:=GetForegroundWindow;
Synchronize(CompareHw);
Sleep(1);
until False;
end;

procedure TLeasenThread.CompareHw;
begin
If Form1.Handle<>Fhw then
begin
Form1.Close;
abort;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
lsn:=TLeasenThread.Create(False);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
lsn:=nil;
end;

end.
И как проверить, есть ли курсор в поле Memo.
Юзай функцию API GetCursorPos
 
?

????

Гость
#3
Есть форма... Ее нужно закрыть, как только она становится неактивной. Но есть маленькая проблема.... КАК???
Если приложение состоит из одной формы, то
Use the TApplication object’s OnDeactivate event
Если есть несколько форм, и надо закрывать при смене активной формы, то
Use OnDeactivate to perform special processing when the form transitions from being the active form to another form in the same application becoming the active form
И как проверить, есть ли курсор в поле Memo.
Use the Focused method to see if the control is the active control
Use CaretPos to determine the coordinates of the cursor
примеров для Delphi нет - могу дать для С++ Builder.

З.Ы. Может тебе пару ebook'ов подкинуть? Ты ведь из Бреста? Если надо - через ПМ.
 
G

GOsha

Гость
#4
З.Ы. Может тебе пару ebook'ов подкинуть? Ты ведь из Бреста? Если надо - через ПМ.
Я сейчас в Минске... Учусь, так-сказать... Я просто PHP-программер.. А Делфу увидел первый раз в универе...
Но как-то слабовато у меня с визуальным программированием. Я знаю что надо, но как... Кидай, если не трудно... БУду только благодарен.
А если в Минске, то можно было бы и увидется. Если тебе не трудно.
Use the TApplication object’s OnDeactivate event
ОНо как-то срабатывает, как только сворачивается, но не когда фокус теряется... Мне нужно, как только фокус с формы пропадает, а не форма сворачивалась...
Delphi нет - могу дать для С++ Builder.
НАсколько знаю, синтаксис не сильно отличется... Есть различия, но не такие координальные.
 
?

????

Гость
#5
GOsha
Я сейчас в Минске...
Хорошо, что не остался в Бресте (БГТУ) учиться - знания дают на 3- (ооо...ооочень поверхностные), а проблем создают больше чем надо.
А если в Минске, то можно было бы и увидется
Ребята устраивают сходки в Минске - с ними можешь встретиться (З.Ы. Давно не собирались.)

Ну держи код для BCB:
файл unit1.cpp:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Application->OnDeactivate = AppDeactivate;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AppDeactivate(TObject *Sender)
{
//  ShowMessage("Потеряли фокус!");
 Application->Terminate();
}
//---------------------------------------------------------------------------
При создании формы указываем, что при событии OnDeactivate нашего приложения следует вызывать метод AppDeactivate, который является методом класса формы и описан ниже:
файл unit1.h:
Код:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
 void __fastcall FormCreate(TObject *Sender);
private:	// User declarations
 void __fastcall AppDeactivate(TObject *Sender);
public: // User declarations
 __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
 
G

GOsha

Гость
#6
Пасиба...
Ребята устраивают сходки в Минске - с ними можешь встретиться (З.Ы. Давно не собирались.)
А де и када?
И чапаму давно не собирались? -Непорядок!
 
G

GOsha

Гость
#8
GOsha
Сборище Кодбаевцев - можешь инициировать новую сходку
Я бы с радостью, тока вот у меня девушка приезжает... Так что мне придется несладко... ТОчнее сладко.. И часу не буде.
Лана... пошел оффтоп. Я все понял...
ВСЕМ СПАСИБО!
 
Статус
Закрыто для дальнейших ответов.