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

Вниз

Доступ к методу родителя   Найти похожие ветки 

 
gog ©   (2014-08-22 13:36) [0]

Добрый день.

Компонета TPanel не имеет метода onKeyDown, однако её прородитель (TWinControl) имеет. Как открыть его для TPanel?


 
DVM ©   (2014-08-22 14:46) [1]

Это не метод а свойство. Открыть можно, сделав своего потомка и вынеся это свойство в published. Или воспользоваться шаманским методом Geo. Но только это мало что даст, фокуса ввода панель не получит все равно, соответственно OnKeyDown не сработает. Надо еще фокусом заниматься будет.


 
DVM ©   (2014-08-22 14:48) [2]


> Надо еще фокусом заниматься будет.

Или TabStop выставить в true. Правда фокуса этого видно не будет.

вот с шаманским методом Geo:


unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type

 TPanel = class(Vcl.ExtCtrls.TPanel)
 published
   property OnKeyDown;
 end;

 TForm1 = class(TForm)
   pnl1: TPanel;
   procedure FormCreate(Sender: TObject);
 private
   procedure OnPanelKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 pnl1.OnKeyDown := OnPanelKeyDown;
 pnl1.TabStop := true;
end;

procedure TForm1.OnPanelKeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
begin
  Caption := "!!!!";
end;

end.


 
DimaBr ©   (2014-08-25 09:57) [3]


type THask = class(TPanel);
procedure TForm1.FormCreate(Sender: TObject);
begin
 THask(Panel1).OnKeyDown := DoKeyDown;
end;


 
DimaBr ©   (2014-08-25 09:57) [4]

Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


 
gog ©   (2014-08-25 11:06) [5]

Всем спасибо за отклик.
У меня ситуация чуть посложнее. Мне нужно в ходе работы программы создавать динамические массивы нанелей разной длины.
Я сделал так: (фрагменты из программы )

unit uChips;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, Menus, AdvMenus;

type
 TChipPanel = class(TPanel)
   published
     property onKeyDown;
 end;

 TfrmChips = class(TForm)
   .......
   .......
 public
   { Public declarations }
   procedure ChipKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   procedure ChipMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   procedure ChipMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   procedure ChipMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
   .......
 end;

implementation

 ChipPanels: array of TChipPanel;

procedure TfrmChips.ChipKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 {обработчик нажатия на клавишы }
end;

 какая то процедура где надо создать массив панелей

procedure TfrmChips.someProcedure(Sender: TObject);
var
I: Integer;
begin
 if Assigned(ChipPanels) then begin
   for I:= 0 to High(ChipPanels) do
     ChipPanels[I].Free;

   Finalize(ChipPanels);
 end;

 for I:= 0 to Some_Value do begin
    SetLength(ChipPanels, Length(ChipPanels) + 1);
    ChipPanels[I]:= TChipPanel.Create(TfrmChips);
    ChipPanels[I].Parent:= TfrmChips;
    ChipPanels[I].TabStop:= True;
    ChipPanels[I].onKeyDown:= ChipKeyDown;
    ChipPanels[I].OnMouseDown:= ChipMouseDown;
      .............
     определяя все нужные параметры.
 end;

end;

OnMouseDown, OnMouseUp, OnMouseMove работают правильно, а OnKeyDown не получает фокуса. Как заставит его работать?


 
DimaBr ©   (2014-08-26 08:07) [6]

>OnKeyDown не получает фокуса
Как вы определили что ПАНЕЛЬ не получили фокуса ?


 
DimaBr ©   (2014-08-26 08:14) [7]

TPanel = class(Vcl.ExtCtrls.TPanel);
TForm1 = class(TForm)
   Panel1: TPanel;
   Panel2: TPanel;
   procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Panel1.OnKeyDown := FormKeyDown;
 Panel2.OnKeyDown := FormKeyDown;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 Caption := TComponent(Sender).Name + " "+ chr(Key);
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.007 c
1-1336803203
WordInDelphi
2012-05-12 10:13
2016.03.06
Проблемка с отображением Word-а на форме


15-1431898365
Дмитрий С
2015-05-18 00:32
2016.03.06
Чем сделать бекап?


15-1434663004
Юрий
2015-06-19 00:30
2016.03.06
С днем рождения ! 19 июня 2015 пятница


2-1408390109
rails
2014-08-18 23:28
2016.03.06
Глюк Webbrowser а в Windows XP (Delphi XE2)


15-1434922216
Юрий
2015-06-22 00:30
2016.03.06
С днем рождения ! 22 июня 2015 понедельник