Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

TCustomControl?   Найти похожие ветки 

 
NaRuTo ©   (2009-06-16 17:32) [0]

Здраствуйте, Мастера! Помогите пожалуйста разобраться. У меня на форме есть два компонента - один дочерний класс родителя TCustomControl, второй просто TEdit. Как заставить дочерний класс родителя TCustomControl быть постоянно в фокусе? Т.е TEdit должен быть не активен до тех пор пока я на него не нажму. Заранее спасиб.


 
Naruto ©   (2009-06-16 17:33) [1]

Да забыл сказать мне нужно, чтобы класс TCustomControl смог обрабатывать события onKeyDown, onKeyPress.


 
DVM ©   (2009-06-16 17:35) [2]

Т.е. фактически тебе надо чтобы фокус не передавался с помощью TAB? Или что другое? Объясни зачем такое нужно.


 
oldman ©   (2009-06-16 18:03) [3]

Сделай у TEdit Visible=False и поставь SpeedButton "Ввести данные", при нажатии на который откроется твой TЕdit.
SpeedButton фокус не получит никогда.


 
Юрий Зотов ©   (2009-06-16 18:20) [4]

> нужно, чтобы класс TCustomControl смог обрабатывать события
> onKeyDown, onKeyPress.

Обработайте в наследнике сообщение WM_GETDLGCODE.
Детали см. в справке API.


 
Leonid Troyanovsky ©   (2009-06-16 18:32) [5]


> Юрий Зотов ©   (16.06.09 18:20) [4]

> > нужно, чтобы класс TCustomControl смог обрабатывать события

> Обработайте в наследнике сообщение WM_GETDLGCODE.

TCustomControl не обязан знать про WM_.
На худой конец CM_.

> NaRuTo ©   (16.06.09 17:32)  

> дочерний класс родителя TCustomControl быть постоянно в
> фокусе?

Фокус бывает у наследников TWinControl.

--
Regards, LVT.


 
oldman ©   (2009-06-16 18:43) [6]


> Т.е TEdit должен быть не активен до тех пор пока я на него
> не нажму.


А он без твоего участия получает фокус??????????????????


 
Naruto ©   (2009-06-16 18:49) [7]

Нет не получает. Как только форма стоновится активна фокус переходит к TEdit.


 
Leonid Troyanovsky ©   (2009-06-16 18:50) [8]


> Naruto ©   (16.06.09 17:33) [1]

> Да забыл сказать мне нужно, чтобы класс TCustomControl смог
> обрабатывать события onKeyDown, onKeyPress.

Установи у формы KeyPreview = true и выбирай контрол, который
должен на них реагировать.

--
Regards, LVT.


 
DVM ©   (2009-06-16 18:50) [9]


> Leonid Troyanovsky ©


> > дочерний класс родителя TCustomControl быть постоянно
> в
> > фокусе?
>
> Фокус бывает у наследников TWinControl.
>

Так TCustomControl  и есть наследник TWinControl


> TCustomControl не обязан знать про WM_.

Еще как обязан.

C TGraphicControl случаем не спутали?


 
DVM ©   (2009-06-16 18:54) [10]


> Naruto ©   (16.06.09 18:49) [7]

TabStop := true; для него сделал?

Ну и + [4] такого (там у меня со стрелками)

procedure TMyControl.WMGetDlgCode(var Message: TMessage);
begin
 Message.Result := DLGC_WANTMESSAGE or DLGC_WANTARROWS;
end;


 
DVM ©   (2009-06-16 19:08) [11]

Вот все нормально, фокус потомку TCustomControl передается:


unit Unit1;

interface

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

type

 TMyControl = class(TCustomControl)
 private
   procedure WMSetFocus(var Message: TMessage); message WM_SETFOCUS;
   procedure WMKillFocus(var Message: TMessage); message WM_KILLFOCUS;
 protected
   procedure Paint; override;
 end;

 TForm1 = class(TForm)
   edt1: TEdit;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   MyControl: TMyControl;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

//------------------------------------------------------------------------------

procedure TMyControl.WMSetFocus(var Message: TMessage);
begin
 Repaint;
 inherited;
end;

//------------------------------------------------------------------------------

procedure TMyControl.WMKillFocus(var Message: TMessage);
begin
 Repaint;
 inherited;
end;

//------------------------------------------------------------------------------

procedure TMyControl.Paint;
begin
 if Self.Focused then
   Canvas.Brush.Color := clRed
 else
   Canvas.Brush.Color := clYellow;
 Canvas.FillRect(ClientRect);
end;

//------------------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyControl := TMyControl.Create(self);
 MyControl.Parent := Self;
 MyControl.Width := 100;
 MyControl.Height := 100;
 MyControl.TabStop := True;
end;

end.



 
Leonid Troyanovsky ©   (2009-06-16 19:22) [12]


> DVM ©   (16.06.09 18:50) [9]

> Так TCustomControl  и есть наследник TWinControl

Может и спутал, бо давненько не брал в руки шашек.
А может для него фокус, по-умолчанию, и не передается.

Нет охоты ради этого дельфи ставить,
да и не найти оный во время ремонта :)

--
Regards, LVT.


 
Naruto ©   (2009-06-16 19:32) [13]

Странно как-то получилось onKeyDown не хотел обрабатывать VK_UP и VK_DOWN попробовал через API WM_KEYDOWN всё получилось. Всем большое спасибо особенно DVM ;)



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
2-1245417227
iterator
2009-06-19 17:13
2009.08.16
Как обратиться к объекту?


15-1244745720
DeadMeat
2009-06-11 22:42
2009.08.16
Чат для локалки


15-1245226088
Юрий
2009-06-17 12:08
2009.08.16
С днем рождения ! 17 июня 2009 среда


2-1244796506
b/@.
2009-06-12 12:48
2009.08.16
Как правильно определять версию файла ?


15-1244775180
TUser
2009-06-12 06:53
2009.08.16
Является ли Земля небесным телом?