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