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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 20:30   #1
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию Программа на WINAPI, сокеты

У меня есть такая задача, нужно сделать программу на котором будет распологаться кнопка "TButton" и компонент "TServerSocket", в обр. соб. "onClick"
Код:
begin
ServerSocket.Active:=true;
end;
Вся программа должна выглядеть так как описано выше.

Но сама размер программы не должно преышать 100кб.

Как быть если автомитически созданная форма VCL превышает 300кб.

Можно ли это как то по другому реализовать и как?

Я попробовал создать форму на WinAPI

Код:
program Project2;

uses
  Windows,
  Messages,
  StdCtrls;

const
  szMainWndClass: array [0..15] of Char = 'Project1MainWnd';
  szCaption: array [0..6] of Char = 'WinAPI';
  szErrClassReg: array [0..30] of Char = 'Ошибка регистрации класса окна';
  szErrCreateWnd: array [0..20] of Char = 'Ошибка создания окна';

  var
  hMainWnd: HWND;
  wc: WNDCLASS;
  mess: MSG;
  Btn: TButton;

  function MainWndProc(Wnd: HWND; uMsg: UINT; WPrm: WPARAM; LPrm: LPARAM): LRESULT;stdcall;
  begin
    Result:=0;
    case uMsg of
      WM_CLOSE: DestroyWindow(Wnd);
      WM_DESTROY: PostQuitMessage(0)
        else
      Result:=DefWindowProc(Wnd,uMsg,WPrm,LPrm);
    end;
  end;

begin
  wc.style := CS_HREDRAW or CS_VREDRAW;
  wc.lpfnWndProc := @MainWndProc;
  wc.cbClsExtra := 0;
  wc.cbWndExtra := 0;
  wc.hInstance := HInstance;
  wc.hIcon := LoadIcon(0, IDI_APPLICATION);
  wc.hCursor := LoadCursor(0, IDC_ARROW);
  wc.hbrBackground := COLOR_WINDOW;
  wc.lpszMenuName := nil;
  wc.lpszClassName := @szMainWndClass;
    if RegisterClass(wc) = 0 then
    begin
      MessageBox(0, @szErrClassReg, nil, MB_OK);
      Exit
    end;
hMainWnd := CreateWindow(@szMainWndClass,
    @szCaption,
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    GetDesktopWindow,
    0,
    HInstance,
    nil);
  if hMainWnd = 0 then
    begin
      MessageBox(0, @szErrCreateWnd, nil, MB_OK);
      Exit
    end;
  ShowWindow(hMainWnd, CmdShow);
  UpdateWindow(hMainWnd);
  while GetMessage(mess, 0, 0, 0) do
    begin
      TranslateMessage(mess);
      DispatchMessage(mess)
    end;
end.
Но кроме этого не знаю как быть дальше. Кто знает что делать дальше и как?

Я пробовал создать кнопку
Код:
Btn.Create();
Что мне писать в параметр? self пишу, но не получается, выдает ошибку(

Не получается создать кнопку и TServerSocket.
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 26.02.2012, 22:58   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

После создания окна создаем кнопку
Код:
hButton1 := CreateWindow ('Button', {строка- надпись},
    WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT,
    5, 5, 65, 24, Window, 0, hInstance, nil); // Window - ссылка на созданное окно
обработка оконных сообщений
Код:
function WindowProc (Window : HWnd; Message, WParam : Word;
         LParam : LongInt) : LongInt; stdcall;

begin
  WindowProc := 0;
  case Message of
...
       // button pushing
       wm_Command : if lParam = hButton1 then ; // тут вызов процедуры нажатия
  end; // case
  WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;
Компонент серверсокет создавайте динамически в процедуре для нажатия кнопки и присваивайте ему для обработчиков событий уже описанные Вами в каком-нибудь классе методы (с правильной сигнатурой конечно же), экземпляр класса можно создать там же где и окно с кнопкой.

Последний раз редактировалось phomm; 26.02.2012 в 23:14.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер, WINAPI, программа,разрезающую изображение на части. urruk Фриланс 0 11.01.2012 18:57
сокеты в с++ (программа-сервер) Matadora Помощь студентам 4 10.12.2011 16:45
статья - Простейшая программа WinAPI на C++ Pblog Обсуждение статей 7 23.06.2011 12:54
Программа проводник на WinApi mephistophel Win Api 2 16.04.2011 02:13
Первая программа на WINAPI Syltan Win Api 8 27.02.2010 22:38