Кнопки
1.Как сделать чтобы в TEdit не было курсора (как в калькуляторе Windows)Я ставлю ей опцию ReadOnly но курсор все равно мигает, а мне это не нужно
2. Как сделать чтобы при нажатии на кнопки на цифровой клавиатуре(NumLock) например на цифре "1", обрабатывалось событие для определенной кнопки в форме.
Заранее благодарен.
Доброго времени суток. У меня тут несколько вопросиков, если кто что подскажет буду очень признателен.
1.Как сделать чтобы в TEdit не было курсора (как в калькуляторе Windows)Я ставлю ей опцию ReadOnly но курсор все равно мигает, а мне это не нужно
2. Как сделать чтобы при нажатии на кнопки на цифровой клавиатуре(NumLock) например на цифре "1", обрабатывалось событие для определенной кнопки в форме.
Заранее благодарен.
1. В каолькуляторе он есть..: в виде: | ну и в едит он такойже если хочешь сменить то глянь в евентс.. Cursor или вообще загрузи любой свой..
2. Я не понял что ты хотел.. , юзай событие OnKeyDown
Посмотри с помощью Spy :)
или NTIce.
:-?
Что еще за Spy объясни конкретнее
:-?
Это одна из утилит MS VC++ - просмотр всех окон системы, с указанием их атрибутов и классов. Что-то вроде WinSight32, только гораздо удобнее
Попробую еще раз. Итак у меня есть форма, на яорме есть поле Edit1(в нем отбражаются цифры которые вводятся с помощью МЫШИ, то есть ты кликаешь на форме кнопку "1",и в Edit1 добовляется тоже "1", ты кликаешь мышкой "2" добавляется "2" и т.д. ) Так вот к чему это я...
У Edit1 уменя стоит свойство ReadOnly (тоже посоветовали) но курсор там все равно мигает(как его вообще убрать?). Я хочу сделать так как в калькуляторе Windows там этого курсора нет а когда нажимаешь на клавиши на цифровой клавиатуре обрабатываются события для клавиш 1,2,3,.../,*,-... :o Как сделать чтобы по нажатым на клавиатуре клавишам тоже обрабатывалось события(уф) Если кто понял подскажите Please:)
Ясно(что ничего не ясно:D ) наверно я как то не так вопрос задал
Попробую еще раз. Итак у меня есть форма, на яорме есть поле Edit1(в нем отбражаются цифры которые вводятся с помощью МЫШИ, то есть ты кликаешь на форме кнопку "1",и в Edit1 добовляется тоже "1", ты кликаешь мышкой "2" добавляется "2" и т.д. ) Так вот к чему это я...
У Edit1 уменя стоит свойство ReadOnly (тоже посоветовали) но курсор там все равно мигает(как его вообще убрать?). Я хочу сделать так как в калькуляторе Windows там этого курсора нет а когда нажимаешь на клавиши на цифровой клавиатуре обрабатываются события для клавиш 1,2,3,.../,*,-... :o Как сделать чтобы по нажатым на клавиатуре клавишам тоже обрабатывалось события(уф) Если кто понял подскажите Please:)
В калькуляторе НЕ Edit... а Panel... если хочешь - дам пример на мыло (дай адрес, куда пролезет 128Kb)
Мой E-mail: [email]jinpo@mail.ru[/email] (для man2002ua)
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{Edit2->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if(((Key<'0')||(Key>'9'))&&(Key!='.'))Key=NULL;
else Edit1->Text=Edit1->Text+Key;
}
//---------------------------------------------------------------------------
Если ставить не Edit а Panel, то цифра у нее печатается вообще в средине, а не справа или слева(как у меня в Edit). Да, там нет курсора , но тогда опять вопрос о кнопках. Как их вводить с клавы (нужно ведь делать обработчики по нажатию клавиш как я понимаю, но как?)
Мой E-mail: [email]jinpo@mail.ru[/email] (для man2002ua)
У компонента есть свойство - Alignment. У панели оно по умолчанию - taCenter. Поэтому и печатается в центре. Поставишь другое значение - будет справа или слева. А про кнопки тебе уже ответили.
Edit2->Width=0, и его не видно
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{Edit2->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
if(((Key<'0')||(Key>'9'))&&(Key!='.'))Key=NULL;
else Edit1->Text=Edit1->Text+Key;
}
//---------------------------------------------------------------------------
Оригинальное решение :) JinPo - это самый простой способ для тебя - используй его, забудь про TPanel
Если ставить не Edit а Panel, то цифра у нее печатается вообще в средине, а не справа или слева(как у меня в Edit).
А ты поиграйся с Alignment и у тебя все будет печататься, там где ты захочешь.
Кстати отдельное спасибо man2002ua
Только это наверно слишком крутые хакеры, раз навешали тебе лапши - проше использовать обработчик формы OnKeyPress - она получает код символа (Enter = 0x0D, ESC = 0x1B и т.п.).
СПАСИБО ВСЕМ БОЛЬШОЕ. Но на одном форуме мне написали что есть какая то функция которая ловит нажатия клавиш на клавиатуре и смотрит их код. Т.е. нажал клавишу(когда форма в активном состоянии) она смотрит ее код и потом, сравнивая с каким то условием решает, добавить ей символ этой клавиши в Edit или нет. Помоему они там что то говорили про catch или getch, но я так и не понял(уж очень КРУТЫЕ ХАКЕРЫ, чтоб что нибудь подсказать). Может кто знает про эту функцию...
Кстати отдельное спасибо man2002ua
Либо воспользуйся компонентом TApplicationEvents, который находится в Adittional палитры компонентов.
void __fastcall TForm1::ApplicationEvents1ShortCut(TWMKey &Msg,
bool &Handled)
{
LabelVersion->Caption = Msg.CharCode;
}
Либо используй это Application->OnShortCut(). Думаю разберешься...
У меня идет текст
__fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if ((int)Key==49)*******
}
так вот что нужно написать на месте "*******" , чтобы дальше шел переход к обработчику события для "Быстрой кнопки"
__fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
..............
}
как это сделать.
Кстати, man2002ua, спасибо за "Справочку" - очень помогла.
PS СПАСИБО ОГРОМНОЕ всем, кто давал советы и отвечал.
С уважением JinPo Кстати сейчас я начал писать простенький текстовый редактор :D
SpeedButton1->Click();
Воспользовавшись последней подсказкой написал )следующее if((int)Key==75) SpeedButton1->Click() Ничего не выходит компилиться но не работает:-?
Посмотри этот проект. Он работает.
Воспользовавшись последней подсказкой написал )следующее if((int)Key==75) SpeedButton1->Click() Ничего не выходит компилиться но не работает:-?
Событие OnKeyPress отслеживает регистр и кодировку(русская, английская). Наверно проблемы из-за этого. Поэтому если в событии OnKeyPress хочешь отследить нажатие клавиши посмотри её кода для всех возможных раскладок клавы и регистра.
JinPo - даш потом посмотреть на твой куркулятор?
а вместо чисел обозначающих клавиши лучше юзать константы - самому же проще будет, их можно найти в хелпе по ключевой фразе vitual key codes
обработчик можно вызвать и так: SpeedButton1Click(SpeedButton1);
а вместо чисел обозначающих клавиши лучше юзать константы - самому же проще будет, их можно найти в хелпе по ключевой фразе vitual key codes
и это правильно! 8)
называйте вещи своими виртуальными именами!
обработчик можно вызвать и так: SpeedButton1Click(SpeedButton1);
а вместо чисел обозначающих клавиши лучше юзать константы - самому же проще будет, их можно найти в хелпе по ключевой фразе vitual key codes
А можно SpeedButton1Click(NULL);
Кстати в чём разница по сравнению с SpeedButton1Click(SpeedButton1)?
Хакеры-программеры, подскажите.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Button2Click(Button1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Caption = ((TButton*)Sender)->Caption;
((TControl*)Sender)->Visible = FALSE;
}
А можно SpeedButton1Click(NULL);
Кстати в чём разница по сравнению с SpeedButton1Click(SpeedButton1)?
Хакеры-программеры, подскажите.
разница, собственно, в значении параметра... :) - если ты его не используешь, то и значение его тебе соответственно - по барабану... а нужен он например, если есть у тебя десять кнопок, на которых весит один обработчик - вот параметр и нужен, чтобы понять от какой кнопки поступило событие...
Товарищи! Отдал я свой калькулятор так сказать на бета тестирование :D Так вот всплыл один момент. Когда его разворачиваешь, получается некрасивость:( Выход, как мне кажется в том, чтобы сделать недоступной кнопку "развернуть" НО КАК?
У формы есть набор свойств BorderIcons. В инспекторе объектов ставишь у BorderIcons свойство biMaximize в false. Вот и всё8) . Вообще-то это написано в любой книжке для начинающих по билдеру или дельфи практически в самом начале:) .
Такой вопрос: у кнопки идет такой обработчик
void __fastcall TForm1::Button16Click(TObject *Sender)
{
String lil; int dog, i, n;
lil = Pole->Caption;
dog = lil.Length();
for (i = 0;i<=dog;i++)
{
if (lil==',') n++;
}
if (n==0) Pole->Caption=Pole->Caption+',';
То есть по идее он должен некую строку просмотреть, на наличие символа и если такой символ нашелся то переменную изменить. Вроде все правильно, но что то не правильно(хе хе)
Все компилится, но когда на эту кнопку жмешь появляется сообщение:
ну я тут посмотрел - все вроде правильно, кроме одного - ты не инициализируешь переменную n, надо ей что-нибудь присвоить, а то там неизвестно что может лежать... и ты, соответственно, это неизвестно что инкрементируешь...
ЗЫ: если я правильно понял, ты просто хочешь определить наличие запятой в строке... тогда лучше юзай функцию Pos(); в твоем случае это будет выглядеть как:
if(!Pole->Caption.Pos(",")) Pole->Caption = Pole->Caption+',';