Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3

Модерирует : ShIvADeSt

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, как физически реализуется, с применением каких "хитростей", такая задача: есть форма с двумя кнопками: Cancel и Ok. Также можно нажать две соответственные клавиши: Esc и Enter. Вопрос в том, как присоединить один обработчик и клавише на клавиатуре, и кнопке на форме?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 19:57 25-10-2007 | Исправлено: DmitryKz, 20:00 25-10-2007
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
я не очень большой спец, но, как мне кажется, TActionList (с закладки Стандартные)
это именно то, что нужно.
кидаешь его, туда вбиваешь два Action - назначаешь им горячую клавишу, Caption и код обработки на onExecute
потом назначаешь кнопке нужный Action

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 20:58 25-10-2007
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Обработай OnKeyPress.(На предпоследний пост от DmitryKz)
Сори, ошибся.

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 21:09 25-10-2007 | Исправлено: ymg2000, 21:48 25-10-2007
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SERGE_BLIZNUK
Если бы все было так просто я тоже не спец, вот у меня в голове и раздирают противоречия: горячие клавиши для Экшена не подходят, потому как Esc и Enter среди них нет. Для обработки нажатия этих клавиш надо использовать события KeyDown или KeyUp (to ymg2000: а не KeyPress, потому как последний распознает символьные, а не функциональные клавиши). По отдельности написать обработчики труда не составляет, но я не понимаю, как сделать один обработчик и на функциональную клавишу, и на кнопку на форме. Чувствую, что чего не понимаю

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 21:54 25-10-2007
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Я тоже не вижу, как это можно сделать. Это ведь два разных события - от клавы и от мыши. Даже если их перехватывать на более низком уровне, все равно нужно перехватывать и клаву и мышь. А зачем тебе так изощряться (все в одном обработчике)?

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 22:33 25-10-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
помнится, я делал вот так:
один и тот же обработчик вешается на keydown формы и на onclick кнопки, а внутри смотришь на tag sender'a ну и в зависимости от него...
не знаю насчёт красоты решения (я тоже совсем не великий vcl-спец), но работало...
 
---------

отмазка:
 
если меня совсем переклинило, то прошу не очень больно...
ещё с работы не ушёл...

Всего записей: 24125 | Зарегистр. 06-12-2002 | Отправлено: 23:11 25-10-2007 | Исправлено: akaGM, 23:22 25-10-2007
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.
Что-бы сделать один обработчик и на Кей и на мышь, можно, наверное, перекрыть соответствующие динамические методы сообщений что-то наподобие:
 
procedure TMyForm.WMKeyDown(var Msg: TWMKeyDown); {override}
begin
   ............
    if Assigned(FMyNewEvent) then
      FMyNewEvent(Self);
end;
// Можно также вместо WMKeyDown перекрыть виртуальный KeyDown  
 
В published
property MyNewEvent: TNotifyEvent read...   write...;
 
Теперь для клавы и для мыши есть однотипные обработчики (для мыши ну и Enter - OnClick) и, значит можно воспользоваться советом akaGM.
 

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 00:47 26-10-2007
AntonVA1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А может все намного проще:
 

Цитата:
 
TBitBtn.Cancel Property
 
Determines whether the button's OnClick event handler executes when the Escape key is pressed.
 
Pascal
property Cancel: Boolean;
Description
If Cancel is true, the button's OnClick event handler executes when the user presses Esc. Although an application can have more than one Cancel button, the form calls the OnClick event handler only for the first visible button in the tab order.  
 
 
 

Цитата:
 
TBitBtn.Default Property
Determines whether the button's OnClick event handler executes when the Enter key is pressed.
 
Pascal
property Default: Boolean;
Description
If Default is true, the button's OnClick event handler executes when the user presses Enter.  
 
Although an application can have more than one Default button, the form calls the OnClick event handler only for the first visible button in the tab order. Moreover, any button that has focus becomes the Default button temporarily; hence, if the user selects another button before pressing Enter, the selected button's OnClick event handler executes instead.  
 

Всего записей: 474 | Зарегистр. 17-09-2003 | Отправлено: 02:37 26-10-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DmitryKz
Для обработки ESC и ENTER OnKeyPress хватает полностью: Key = #27 и #13 соответственно

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 07:56 26-10-2007
AntonVA1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
А что, мое решение не подходит? "Все уже сделано до нас".
Вроде как обрабатываются те же клавиши.
На кнопку Cancel ставишь Cancel Property  в true и  
на кнопку Ok ставишь Default Property  в true
Все работает. При этом кнопка Ok еще и обрамляется рамкой.

Всего записей: 474 | Зарегистр. 17-09-2003 | Отправлено: 13:56 26-10-2007
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AntonVA1
Спасибо за подсказку, кажется это то, что надо!
 
Добавлено:
Как обозначается путь к рабочему столу в свойстве path компонента shelltreeview? Я знаю, что по умолчанию вершина и будет рабочим столом, но вот нужно иногда программно это задать?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 16:01 26-10-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Блин все интересует впихивание картинки и надписи на кнопку средствами Вин Апи. Ну может быть кто-нибудь знает как сие чудо сотворить или подскажите сайты любителей выкладывания исходничков где есть эта направленность.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:02 27-10-2007
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AntonVA1
В большинстве ситуаций действительно подходит, сам так всегда делаю, за исключением одного момента - если на модальной форме есть TMemo и фокус на ней, то Esc не приводит к срабатыванию кнопки с Cancel=True
А знать то, что Enter и Esc можно в OnKeyPress обработать, имхо, не помешает

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 09:32 28-10-2007 | Исправлено: RomanTim, 09:34 28-10-2007
lavren



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
подскажите сайты любителей выкладывания исходничков

http://delphimaster.ru/cgi-bin/forum.pl?n=5
http://delphikingdom.ru/table/page.asp

Всего записей: 545 | Зарегистр. 29-05-2007 | Отправлено: 10:42 29-10-2007
MrZeRo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Исходники VCL, модуль buttons.pas - вот хороший исходничек по этой теме.

----------
... не это главное ...

Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 18:11 29-10-2007
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 18:46 29-10-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ymg2000

Цитата:
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.  

полностью согласен...
забыл, что делал их для однотипных обработчиков,
но однотипных лишь по числу/типу параметров...

Всего записей: 24125 | Зарегистр. 06-12-2002 | Отправлено: 19:04 29-10-2007 | Исправлено: akaGM, 19:05 29-10-2007
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MrZeRo
Да я хз знает что там. Слишком сложновато разбирать...
 
Кстати помогите приспособить вот такой код всплывающих подсказок:
 

Код:
 
const
  TTS_BALLOON = $40;
 
var
  hTooltip : Cardinal;
  ti       : TToolInfo;
 
procedure ShowHelpText(wParam: WPARAM; lParam: LPARAM; hSB: HWND);
var
  bla : array of integer;
begin
  if BOOL(HIWORD(wParam) and MF_POPUP) or BOOL(HIWORD(wParam) and MF_SEPARATOR) or (HIWORD(wParam) = $FFFF)
  then
    SendMessage(hSB, SB_SIMPLE, 0, 0)
  else
    MenuHelp(WM_MENUSELECT, wParam, lParam, HMENU(lParam), hInstance, hSB, @bla);
end;
 
procedure CreateToolTips(hWnd: Cardinal);
begin
  hToolTip := CreateWindowEx(0, 'Tooltips_Class32', nil, TTS_ALWAYSTIP, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), hWnd, 0, hInstance, nil);
  if hToolTip <> 0 then
  begin
    SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    ti.cbSize := SizeOf(TToolInfo);
    ti.uFlags := TTF_SUBCLASS;
    ti.hInst := hInstance;
  end;
end;
 
procedure AddToolHint(hwnd, id: Cardinal; lpti: PToolInfo; lpText: PChar);
var
  Item : THandle;
  Rect : TRect;
begin
  Item := GetDlgItem(hWnd, id);
  if (Item <> 0) AND (GetClientRect(Item, Rect)) then
  begin
    lpti.hwnd := Item;
    lpti.Rect := Rect;
    lpti.lpszText := lpText;
    SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti));
  end;
end;
 
.....
// в WM_INITDIALOG суем
CreateToolTips(hwnd);
AddToolHint(hwnd, HandleButton, @ti, 'Text');
 

 
Так вот необходимо включать и выключать данную опцию - то есть есть чекбокс и хочется проделывать это через него. Я смутно представляю как можно сделать true или false этой процедуры. Помогите плиз что надо изменить в коде. Совсем разленился...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:55 29-10-2007
nuker2015



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?
Помести TImage на TPanel

Всего записей: 132 | Зарегистр. 26-10-2005 | Отправлено: 01:51 30-10-2007
informesrab

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь открывать несколько раз файл, в результате на второй, третий раз в строке Reset(f) возникает ошибка. Решил применить обработчик ошибки try exept, но он не помогает, всеровно показует ошибку в строке Reset(f), а хочу чтобы он выдал сообщение или выполнил другую команду.
 
var  f:file of byte;
      fal2:string;
      siz1:longint;
begin
 fal2:='e:\file\files.txt';
 AssignFile(f,fal2);
 try
 Reset(f);
 exept
   edit1.text:="Error";
 end;
 siz1:=FileSize(f);
 CloseFile(f);
 
Почему обработчик ошибки не работает.

Всего записей: 17 | Зарегистр. 16-06-2007 | Отправлено: 13:18 30-10-2007
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru