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

Вниз

Нажатие Bitbtn с клавиатуры   Найти похожие ветки 

 
Андрей_1 ©   (2008-09-17 13:32) [0]

В проге есть кнопки Bitbtn. Надо чтобы была возможность нажатия их с клавиатура клавишами 1,2,3,4,5......9. Подскажите пожалуйста!!!


 
{RASkov} ©   (2008-09-17 13:34) [1]

> [0] Андрей_1 ©   (17.09.08 13:32)

У них есть метод Click;
У формы есть свойство KeyPrewiev и методы OnKeyXxxx


 
brother ©   (2008-09-17 13:35) [2]

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if key="1" then Bitbtn1.click;
 if key="2" then Bitbtn2.click;
....
end;


 
Андрей_1 ©   (2008-09-17 14:55) [3]

Прописал вот так, но не работает

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key="1" then Bitbtn1.Click;
if key="2" then Bitbtn3.Click;
if key="3" then Bitbtn4.Click;
if key="4" then Bitbtn5.Click;
if key="5" then Bitbtn8.Click;
if key="6" then Bitbtn9.Click;
end;

и вот так не работает:

procedure TForm1.FormClick(Sender: TObject;var Key: Char);

begin
if key="1" then Bitbtn1.Click;
if key="2" then Bitbtn3.Click;
if key="3" then Bitbtn4.Click;
if key="4" then Bitbtn5.Click;
if key="5" then Bitbtn8.Click;
if key="6" then Bitbtn9.Click;
end;


 
Dennis I. Komarov ©   (2008-09-17 14:59) [4]


> procedure TForm1.FormClick(Sender: TObject;var Key: Char);

Вот это вообще шедвр!!!

Наверное кнопки не в том порядке на форму бросил... :)


 
antonn ©   (2008-09-17 15:02) [5]


> Dennis I. Komarov ©   (17.09.08 14:59) [4]
>
>
> Вот это вообще шедвр!!!

как подсказали, так и сделал :)


 
{RASkov} ©   (2008-09-17 15:05) [6]

> [3] Андрей_1 ©   (17.09.08 14:55)
> Прописал вот так, но не работает

Пропиши вот так:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 ShowMessage(key);
{  case Key of
  : ;
 end;}
end;

Не забудь про KeyPrewiev далее понажимай нужные кнопки и посмотри что будет показываться.... немного подумай, заполни case и все будет пучком.


 
{RASkov} ©   (2008-09-17 15:08) [7]

> понажимай нужные кнопки

ессно на клавиатуре :) О, боже...)


 
Dennis I. Komarov ©   (2008-09-17 15:18) [8]


> немного подумай

вот это тоже ;)


 
{RASkov} ©   (2008-09-17 15:18) [9]

> [3] Андрей_1 ©   (17.09.08 14:55)
> Прописал вот так

Медицинский заканчивал? Терапевт, млин...
:о)


 
clickmaker ©   (2008-09-17 15:23) [10]

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var Btn: TBitBtn;
begin
 Btn := FindComponent("Bitbtn" + IntToStr(Ord(Key) - 48));
 if (Btn <> nil) then
   Btn.Click;
end;


 
{RASkov} ©   (2008-09-17 15:25) [11]

> [10] clickmaker ©   (17.09.08 15:23)

Круто :)
Только можнож и так:
Btn := FindComponent("Bitbtn" + IntToStr(Key));
Только Bitbtn0 тоже должен быть :)


 
{RASkov} ©   (2008-09-17 15:26) [12]

> Btn := FindComponent("Bitbtn" + IntToStr(Key));

Тьфу... Вот:
Btn := FindComponent("Bitbtn" + Key);
:)


 
Германн ©   (2008-09-17 15:29) [13]


> FindComponent("Bitbtn" + IntToStr(Ord(Key) - 48));

Bitbtn#0 - это круто :)


 
Германн ©   (2008-09-17 15:30) [14]


> Германн ©   (17.09.08 15:29) [13]

Не проснулся :(


 
Андрей_1 ©   (2008-09-17 15:49) [15]

сделал:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var Btn: TBitBtn;
begin
Btn := FindComponent("Bitbtn" + IntToStr(Ord(Key) - 48));
if (Btn <> nil) then
  Btn.Click;
end;

Выдаёт:

[Error] Unit1.pas(586): Incompatible types: "TBitBtn" and "TComponent"

Сделал:

Btn := FindComponent("Bitbtn" + IntToStr(Key));

Выдаёт:
[Error] Unit1.pas(589): There is no overloaded version of "IntToStr" that can be called with these arguments


 
Германн ©   (2008-09-17 15:55) [16]


> Выдаёт:
>
> [Error] Unit1.pas(586): Incompatible types: "TBitBtn" and
> "TComponent"
>
> Сделал:
>
> Btn := FindComponent("Bitbtn" + IntToStr(Key));
>
> Выдаёт:
> [Error] Unit1.pas(589): There is no overloaded version of
> "IntToStr" that can be called with these arguments
>

Стрельба наугад из за угла?


 
Anatoly Podgoretsky ©   (2008-09-17 15:55) [17]

> clickmaker  (17.09.2008 15:23:10)  [10]

IntToStr(Ord("1") - 48)) = "1"


 
Андрей_1 ©   (2008-09-17 15:56) [18]

Btn := FindComponent("Bitbtn" + Key);

Ошибка: [Error] Unit1.pas(589): Incompatible types: "TBitBtn" and "TComponent"


 
{RASkov} ©   (2008-09-17 15:59) [19]

> [18] Андрей_1 ©   (17.09.08 15:56)

Используй приведение.... Не, то то которое с моторчиком :)


 
Плохиш ©   (2008-09-17 16:01) [20]


> Андрей_1 ©   (17.09.08 15:56) [18]

Значит не судьба.


 
{RASkov} ©   (2008-09-17 16:02) [21]

> Не, то то которое с моторчиком :)

:)
Наоборот)
Не, не то....


 
Правильный$Вася   (2008-09-17 16:06) [22]


> Стрельба наугад из за угла?

ты что, это научный метод
ТриП называется: пол-потолок-палец


 
Anatoly Podgoretsky ©   (2008-09-17 16:09) [23]

> Андрей_1  (17.09.2008 15:56:18)  [18]

Так и есть.


 
Vlad Oshin ©   (2008-09-17 16:13) [24]

:)
а я злой


> Btn := FindComponent("Bitbtn" + Key);
>
> Ошибка: [Error] Unit1.pas(589): Incompatible types: "TBitBtn"
> and "TComponent"

Btn := TBitBtn(FindComponent("Bitbtn" + Key));

или
if (FindComponent("Bitbtn" + Key) is tBitBtn)
then Btn := tBitBtn(FindComponent("Bitbtn" + Key) );

или
if (FindComponent("Bitbtn" + Key) is tBitBtn)
then Btn := (FindComponent("Bitbtn" + Key) as tBitBtn);


 
Андрей_1 ©   (2008-09-17 16:29) [25]

Тут ошибок не появляется, но

if (FindComponent("Bitbtn" + Key) is tBitBtn)
then Btn := tBitBtn(FindComponent("Bitbtn" + Key) );
  Btn.Click;

нет события нажатия на соответствующую BitBtn


 
clickmaker ©   (2008-09-17 16:32) [26]

var Comp: TComponent;

Comp := FindComponent("Bitbtn" + Key);
if (Comp is TBitBtn) then
 TBitBtn(Comp).Click;


 
Vlad Oshin ©   (2008-09-17 16:57) [27]

кстати,  хотел спросить в чем разница
T1(T2).prop:=
и
(T2 as T1).prop:=
почти спросил, но потом полез в CPU, понял. Не стирать же :)

 tb=class(tButton)
 private
   q:string;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  b:tb;

procedure SetCaption1(var B:tObject);
begin
 if (B is tButton)
  then tButton(B).Caption:="111";
{
Unit1.pas.36: then tButton(B).Caption:="111";
00458074 8B03             mov eax,[ebx]
00458076 BA8C804500       mov edx,$0045808c
0045807B E8F41BFEFF       call TControl.SetText
}
end;

procedure SetCaption2(var B:tObject);
begin
 if (B is tButton)
  then (B as tButton).Caption:="222";
{
Unit1.pas.48: then (B as tButton).Caption:="222";
004580A4 8B03             mov eax,[ebx]
004580A6 8B15F07F4200     mov edx,[$00427ff0]
004580AC E85BB9FAFF       call @AsClass
004580B1 BAC8804500       mov edx,$004580c8
004580B6 E8B91BFEFF       call TControl.SetText
}
end;

begin
  b:=tb.Create(form1);
  b.Parent:=form1;
  b.Left:=1;
  b.Top:=1;
  b.Visible:=true;

  SetCaption1(tObject(b));
     ShowMessage("");
  SetCaption2(tObject(b));
end;

------------------------------------------------------------
 tb=class(tButton)
 private
   q:string;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  b:tb;

procedure SetCaption1(var B:tObject);
begin
 if (B is tButton)
  then tLabel(B).Caption:="111";
//ок! для все что имеет Caption
end;

procedure SetCaption2(var B:tObject);
begin
 if (B is tButton)
  then (B as tLabel).Caption:="222"; //invalid
end;

begin
  b:=tb.Create(form1);
  b.Parent:=form1;
  b.Left:=1;
  b.Top:=1;
  b.Visible:=true;

  SetCaption1(tObject(b));
     ShowMessage("");
  SetCaption2(tObject(b));
end;

----------


 
Андрей_1 ©   (2008-09-18 07:24) [28]

Написал так:

if (FindComponent("Bitbtn" + Key) is tBitBtn)
then Btn := tBitBtn(FindComponent("Bitbtn" + Key) );
ShowMessage("Key");
Comp := FindComponent("Bitbtn" + Key);
if (Comp is TBitBtn) then
TBitBtn(Comp).Click;

Но сообщения "ShowMessage("Key")"  не по является. Видимо не определяется нажптие клавиши.


 
Dennis I. Komarov ©   (2008-09-18 09:18) [29]

А теперь раскажи где ты это чудо написал, и что оно по-твоему должно делать...


 
Vlad Oshin ©   (2008-09-18 09:40) [30]


> где ты это чудо написал

на стене, в туалете :)


> что оно по-твоему должно делать...

отвлекать от процесса, чего же еще?
-------
1. form.KeyPreview=?
2. Всю процедуру, от шапки, нельзя показать?
Может ты ее на ConstrainedResize повесил :)


 
{RASkov} ©   (2008-09-18 11:43) [31]

> [28] Андрей_1 ©   (18.09.08 07:24)

Да чтож не везуха-то какая :(


 
[i2e]   (2008-09-18 15:21) [32]

procedure TMDIChild.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var ...;
begin
 if Shift=[ssShift] then
 begin
   case Key of
   VK_UP: ...;
   VK_DOWN: ...;
   VK_LEFT: ...;
   VK_RIGHT: ...;
   end;
   Exit;
 end;
 //
 if (chr(Key)="O") then // Открыть последний файл
            begin
            MainForm.SpeedButton5.OnClick(Sender); // <--- нажатие кнопки
            end;
 //
 if (chr(Key)="R") then // Rotate - вертеть компонент связь
            begin
              MainForm.fRotateComp := True;
              FormActivate(Sender);
            end;
 case Key of
 VK_UP:     begin // стрелка вверх
            ...  
            end;

и т.д.
может поможет?
кусок точно рабочий. проверено. SpeedBtn или BitBtn - разницы нет.



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

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

Наверх




Память: 0.55 MB
Время: 0.014 c
2-1221741033
renex
2008-09-18 16:30
2008.10.26
программно создать компонент


1-1200983736
frostyland
2008-01-22 09:35
2008.10.26
Как программно скроллировать окно, чтобы сделать видимым контрол?


15-1219930822
XentaAbsenta
2008-08-28 17:40
2008.10.26
Чем вам лично не нравится CPP?


2-1221661922
DancerMan
2008-09-17 18:32
2008.10.26
TListView переместиться в конец списка


2-1221992928
voprsest
2008-09-21 14:28
2008.10.26
поиск дочерних окон