Форум: "Начинающим";
Текущий архив: 2016.03.06;
Скачать: [xml.tar.bz2];
ВнизДоступ к методу родителя Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.001 c