На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Hotlkeys
    Всем привет. Столкнулся с таким: мне нужно назначить горячую клавишу для моего компонента. Использую TShurtCut в проперте. Хоткею думаю обрабатывать через message WM_HOTKEY. Осталось преобразовать TShurtCut в MOD_??? и VK_???. Как бы это сделать покультурнее?
      Делал я немного для другого, но многое можешь из этого выдернуть :)

      ExpandedWrap disabled
        {- HotKey -}
        type
          WordRec = packed record
            case Integer of
              0: (Lo, Hi: Byte);
              1: (Bytes: array [0..1] of Byte);
          end;
         
        function Shift2Str(Shift:word):string;
        begin
         result:='';
         if Shift=0 then begin
          if ((HiWord(GetKeyState(VK_LWIN))<>0) or
              (HiWord(GetKeyState(VK_RWIN))<>0)) then result:=result+'Win+';
          if HiWord(GetKeyState(vk_Shift))<>0    then result:=result+'Shift+';
          if HiWord(GetKeyState(VK_CONTROL))<>0  then result:=result+'Ctrl+';
          if HiWord(GetKeyState(VK_MENU))<>0     then result:=result+'Alt+';
         end else begin
          case Shift of
           1:result:='Alt+';
           2:result:='Ctrl+';
           3:result:='Ctrl+Alt+';
           4:result:='Shift+';
           5:result:='Shift+Alt+';
           6:result:='Shift+Ctrl+';
           8:result:='Win+';
           9:result:='Win+Alt+';
          10:result:='Win+Ctrl+';
          12:result:='Win+Shift';
          end;
         end;
        end;
         
        function Key2Str2(Key:word):string;
        var bf: array[0..255] of char;
            ScanCode: Integer;
        begin
         result:='';
         ScanCode := MapVirtualKey(WordRec(key).Lo, 0) shl 16;
         if ScanCode <> 0 then begin
          GetKeyNameText(ScanCode,bf,sizeof(bf));
          result:=bf;
         end;
        end;
         
        {old}
        procedure Str2Key(sKey:string;var Key,Shift:word);
        var k:word;
        begin
         Shift:=0;
         if pos('Win+',sKey)<>0    then Shift:=MOD_WIN or Shift;
         if pos('Shift+',sKey)<>0  then Shift:=MOD_SHIFT or Shift;
         if pos('Ctrl+',sKey)<>0   then Shift:=MOD_CONTROL or Shift;
         if pos('Alt+',sKey)<>0    then Shift:=MOD_ALT or Shift;
         if Shift<>0 then begin
          if pos('Win+',sKey)<>0   then Delete(sKey,pos('Win+',sKey),length('Win+'));
          if pos('Shift+',sKey)<>0 then Delete(sKey,pos('Shift+',sKey),6);
          if pos('Ctrl+',sKey)<>0  then Delete(sKey,pos('Ctrl+',sKey),5);
          if pos('Alt+',sKey)<>0   then Delete(sKey,pos('Alt+',sKey),4);
         end;
         for k:=3 to 226 do
          if sKey=Key2Str2(k) then begin
           key:=k;
           break;
          end;
        end;
        {- HotKey -}
        Мне подсказали сделать таким образом:
        ExpandedWrap disabled
          uses
            Menus;
           
          procedure GetHotKey(AShortCut: TShortCut; var VirtKey, Modifiers: Word);
          var
            Shift: TShiftState;
          begin
            ShortCutToKey(AShortCut, VirtKey, Shift);
            Modifiers := 0;
            if ssCtrl in Shift then
              Modifiers := Modifiers or MOD_CONTROL;
            if ssShift in Shift then
              Modifiers := Modifiers or MOD_SHIFT;
            if ssAlt in Shift then
              Modifiers := Modifiers or MOD_ALT;
          end;
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0264 ]   [ 15 queries used ]   [ Generated: 20.05.24, 19:50 GMT ]