Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 20:08   #11
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот форма с контролами, весом в 16 кБ
Если форма не нужна, закоменть строку ShowWindow(MainForm, SW_SHOWNORMAL);
Код:
program leson1;

uses
  Windows, Messages;

var
  WndClass: TWndClass;
  MainForm, Edit1, Button1: HWND;
  Msg: TMsg;

procedure Button1Click;
var
  EditText: String;
  LenEditText: Integer;
begin
  LenEditText := GetWindowTextLength(Edit1) + 1;
  SetLength(EditText, LenEditText);
  GetWindowText(Edit1, PChar(EditText), LenEditText);
  MessageBox(MainForm, PChar('Ты набрал: ' + EditText), 'Сообщение',
    MB_APPLMODAL or MB_ICONINFORMATION or MB_OK);
end;

procedure CreateControls(hInstance: Integer);
begin
  Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', 'Текстовое поле',
    WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL or ES_NOHIDESEL,
    8, 16, 160, 21,
    MainForm, 0, hInstance, nil);

  Button1 := CreateWindow('Button', 'Нажми',
    WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON or BS_TEXT ,
    160, 120, 120, 25,
    MainForm, 0, hInstance, nil);
end;

function WindowProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM):
  LRESULT; stdcall;
begin
  case uMsg of
    WM_DESTROY: PostQuitMessage(0);
    WM_ACTIVATE: SetFocus(Edit1);
    WM_COMMAND:
    begin
      Result := 0;
      if lParam = Button1 then
        case wParam of
          BN_CLICKED: Button1Click;
          else Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
        end;
    end;
    else Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
  end;
end;

begin
  with WndClass do
  begin
    Style := 0;
    lpfnWndProc := @WindowProc;
    cbClsExtra := 0;
    cbWndExtra := 0;
    hInstance := hInstance;
    hIcon := 0;
    hCursor := LoadCursor(0, IDC_ARROW);
    hbrBackground := COLOR_WINDOW;
    lpszMenuName := nil;
    lpszClassName := 'TMainForm';
  end;

  if RegisterClass(WndClass) = 0 then Exit;

  MainForm := CreateWindow('TMainForm', 'WinApi. Урок №1',
    WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
    320, 200, 0, 0, hInstance, nil);

  CreateControls(hInstance);
  ShowWindow(MainForm, SW_SHOWNORMAL);

  while GetMessage(Msg, 0, 0, 0) <> BOOL(FALSE) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end.
P.S. Взято с http://vr-online.ru/?q=content/winapi-urok-pervyj-493

udp
Цитата:
В таком случае лучше скачайте APIx. Он сможет визуализировать API-форму.
Ну, это уже как ТС удобней))

Последний раз редактировалось psycho-coder; 01.03.2010 в 20:12.
psycho-coder вне форума Ответить с цитированием
Старый 01.03.2010, 20:10   #12
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

В таком случае лучше скачайте APIx. Он сможет визуализировать API-форму.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 01.03.2010, 20:33   #13
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

16кб - это конечшо хорошо, но опять же, как туда функцию типа procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
?
TwiX вне форума Ответить с цитированием
Старый 01.03.2010, 20:42   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

WM_HOTKEY сюда например
Код:
// СКЕЛЕТ =====================================================================
function WndProc(hnd, wmsg, wparam, lparam: integer): integer; stdcall;
begin
 case wmsg of
  //
  WM_HOTKEY: begin
              if lo(wparam)= 34 then begin closewin(stop_proc); status:= 'Закрыт - '+ stop_proc; end;
              if lo(wparam)= 38 then begin WinExec(pchar(run_proc),SW_SHOW); status:= 'Запущен - '+ run_proc; end;
             end;
  TRAY_CALLBACK: case dword(lparam) of
           {WM_LBUTTONdblCLK: begin
                              UnRegisterHotKey(handle,id);
                              PostQuitMessage(handle);
                              timer_destroy;
                              closeWindow(Handle)
                             end;}
           WM_MBUTTONDOWN  : begin  
                              UnRegisterHotKey(handle,id);
                              PostQuitMessage(handle);
                              closeWindow(Handle)
                             end;
           WM_LBUTTONDOWN  : hint:= 'Вау!';
           WM_LBUTTONUP    : begin
                              hint:= 'Kill and Run Programs';
                              show_tn(1,status,'Kill and Run Programs, RAMEDIA Inc.')
                             end;
           WM_RBUTTONUP    : ;

          end;

  WM_DESTROY: begin
               PostQuitMessage(0);
        
              end;
  else Result:= DefWindowProc(hnd, wmsg, wparam, lparam);
 end
end;
привязать без формы можно через AllocateHWnd(WndProc)...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.03.2010, 21:20   #15
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Мало что понятно, но спасибо =)
TwiX вне форума Ответить с цитированием
Старый 01.03.2010, 21:41   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
// назначаем горячие клавиши, например CTR+1 и CTR+2
 id:=GlobalAddAtom('hotkey1');
 RegisterHotKey(handle, id, MOD_CONTROL, ord('1'));
 id2:=GlobalAddAtom('hotkey2');
 RegisterHotKey(handle, id2, MOD_CONTROL, ord('2'));
...

var fwnd: hwnd;
// при создании привязываем событие
FWnd:= AllocateHWnd(WndProc);

// при закрытии приложения освобождаем
deAllocateHWnd(WndProc);

// обрабатываем WM_HOTKEY
function WndProc(hnd, wmsg, wparam, lparam: integer): integer; stdcall;
begin
 case wmsg of
  //
  WM_HOTKEY: begin
              if lo(wparam)= 34 then ; // ваши действия-1
              if lo(wparam)= 38 then ; // ваши действия-2
             end;
...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.03.2010, 21:47   #17
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Что такое 38 и 34?
Спасибо)
TwiX вне форума Ответить с цитированием
Старый 01.03.2010, 22:56   #18
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

чтоб понятнее, модифицировал в класс...
Код:
program no_form_and_hotkey;

uses Windows,Messages, classes;


type
 TF = class
 protected
  constructor Create;
  destructor Destroy;

  procedure WndProc(var Msg:TMessage); message WM_hotkey;
end;


var
  fwnd: HWND;
  t:tf;
  Msg: tmsg;
  id, id2: integer;
 


function strtohotkey(key:string; p: boolean):integer;
begin
 result:= 0;

 if p then begin
  if pos('Alt',key)>0   then result:= 1;
  if pos('Ctrl',key)>0  then result:= 2;
  if pos('Shift',key)>0 then result:= 4
 end else result:= ord(key[length(key)])
end;

procedure tf.WndProc(var Msg: TMessage); // событие-
begin
 if (msg.LParamLo = strtohotkey('Ctrl + 1', true))  and
    (msg.LParamHi = strtohotkey('Ctrl + 1', false)) then messagebox(0,'1','',0);

 if (msg.LParamLo = strtohotkey('Ctrl + 2', true))  and
    (msg.LParamHi = strtohotkey('Ctrl + 2', false)) then messagebox(0,'2','',0);
end;

constructor TF.Create;
begin
 inherited Create;
 FWnd:= AllocateHWnd(WndProc);
end;
destructor TF.Destroy;
begin
 inherited Create;
 deAllocateHWnd(fWnd)
end;




begin
 t:= tf.Create;
 //
 id:=GlobalAddAtom('hotkey1');
 RegisterHotKey(fwnd, id, MOD_CONTROL, ord('1'));
 id2:=GlobalAddAtom('hotkey2');
 RegisterHotKey(fwnd, id2, MOD_CONTROL, ord('2'));

 try while GetMessage(Msg, 0, 0, 0) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg)
 end finally t.destroy end
// END СКЕЛЕТ ============================================

end.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.03.2010, 08:03   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
TwiX
Ты скажи ка для чего ты енто полез в такие баминги? Чего пишешь то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.03.2010, 12:48   #20
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ничего серьёзного) Что-то вроде TeamViewer'а, невидимого на одной стороне)
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как доставить приглашение пользователю присоединиться в чат-комнату doniyor Работа с сетью в Delphi 5 31.01.2010 19:24
Как узнать вес HTML-странички без загрузки - idhttp.head(url); Gonzo Работа с сетью в Delphi 6 07.11.2009 18:20
как из макроса передать управление пользователю, а потом опять макросу? Тупой Microsoft Office Excel 5 03.09.2009 23:01
Как уменьшить размер сборки? Д'якон Общие вопросы Delphi 12 03.09.2009 11:18