Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c