Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Минимальное оконное приложение на Delphi 1.0 с использованием Win [D1]


Так себе ©   (2006-08-23 00:23:00) 

Как создать мин. приложение в первой версии Дельфи минуя при этом директиву   stdcall?


Чапаев   (2006-08-26 08:37:00) [1]

> обложка была в бело-синих тонах

В жёлто-синих, я бы сказал. Хотя и белого немало.

ЗЫ. Первое сообщение отправлено по ошибки, не сочтите за флуд...


Чапаев   (2006-08-26 08:36:00) [2]

> Кто-то, когда-то её у меня заиграл.

Не я! ;-)


Германн   (2006-08-26 01:10:00) [3]


> Перепечатываю (творчески) пример из А Фёдоров, Д. Рогаткин
> "Borland Pascal в среде Windows".
>

Помню ту книгу.Кто-то, когда-то её у меня заиграл. Свою первую программку для Винды на BPW писал с её помощью. Сейчас помню только, что обложка была в бело-синих тонах. :-(


Чапаев   (2006-08-25 23:40:00) [4]

Ноябрь 1992...


Other unknow what &COPY   (2006-08-25 23:19:00) [5]

Спасибо за пример! Когда была написана книга авторов А Фёдоров, Д. Рогаткин "Borland Pascal в среде Windows"?


Чапаев   (2006-08-25 08:25:00) [6]

> Дмитрий Иванович

В миру -- Дмитрий Николаевич. ;-)

Перепечатываю (творчески) пример из А Фёдоров, Д. Рогаткин "Borland Pascal в среде Windows".


program HelloWin;
uses Windows, Messages;
const AppName='WinMin';

function WindowProc(Wnd:HWND; Msg, WParam:Word; LParam:LongInt):LongInt;export;
begin
 WindowProc:=0;
 case Msg of
   WM_DESTROY:
     begin
       PostQuitMessage(0);
       Exit;
     end;
 end;
 WindowProc:=DefWindowProc(Wnd, Msg, WParam, LParam);
end;

var
 Window:HWND;
 Msg:TMsg;
 WinClass:TWndClass;

begin
 if HPrevInst=0 then begin
   FillChar(WinClass,SizeOf(WinClass),0);
   WinClass.HInstance:=HInstance;
   with WinClass do begin
     Style:=CS_HREDRAW or CS_VREDRAW;
     lpfnWndProc:=@WindowProc;
     hIcon:=LoadIcon(0, IDI_APPLICATION);
     hCursor:=LoadCursor(0, IDC_ARROW);
     hbrBackground:=GetStockObject(WHITE_BRUSH);
     lpszClassName:=AppName;
   end;
   if not RegisterClass(WinClass) then
     Halt(255);
 end;
 Window:=CreateWindow(AppName,
                      'Hello',
                      WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,
                      CW_USEDEFAULT,
                      CW_USEDEFAULT,
                      CW_USEDEFAULT,
                      0,
                      0,
                      HInstance,
                      nil);
 ShowWindow(Window, SW_SHOW);
 UpdateWindow(Window);
 while GetMessage(Msg,0,0,0) do begin
   TranslateMessage(Msg);
   DispatchMesage(Msg);
 end;
 Halt(Msg.WParam);
end.


guav   (2006-08-25 01:54:00) [7]

Message вроде тоже Word. И вообще тем у кого сей раритет не установлен написать рабочий win16 код создания окна и цикла выборки сообщений будет затруднительно - из-за давности ухода этого всего.
Тут проще запустить Delphi (без параметров) и использовать созданный автоматом код - это будет почти такое же пустое окно.


Германн   (2006-08-25 01:39:00) [8]

Блин!

> Кинь ему Дмитрий Иванович!

Какой чёрт меня дёрнул за руку? Конечно же Василий Иванович!:-)


Германн   (2006-08-25 01:37:00) [9]


> Так себе   (24.08.06 23:07) [9]
>
> Родитель (Чапаев) кинь пример и все на этом! (От начало
> и до конца)


> Чапаев ©   (24.08.06 08:28) [6]
>
> > И всё равно работать не будет.
>
> Нуууу, может и не будет -- из-за других ошибок по тексту.
>  Но вообще в древних версиях Делфи и в Паскале для Виндовс
> функции обратного вызова специфицировались именно как export.
>
>


> Чапаев ©   (24.08.06 12:41) [8]
>
> Кстати, да. WParam=Word в данном случае.

Кинь ему Дмитрий Иванович! Пусть успокоится! (С миром) :-)
Ему же "так себе" "всё по-фигу"! Лишь бы пример был. А потом он придумает себе другой дурацкий ник и будет спрашивать "другое не знаю что".


Так себе   (2006-08-24 23:07:00) [10]

Родитель (Чапаев) кинь пример и все на этом! (От начало и до конца)


Чапаев   (2006-08-24 12:41:00) [11]

Кстати, да. WParam=Word в данном случае.


DrPass   (2006-08-24 12:25:00) [12]

Не будет - как минимум, из-за
> function WindowProc(Hwn,msg,wpr,lpr: Longint): Longint;
> stdcall;


wParam в Win16 имел двухбайтовый целый тип.


Чапаев   (2006-08-24 08:28:00) [13]

> И всё равно работать не будет.

Нуууу, может и не будет -- из-за других ошибок по тексту. Но вообще в древних версиях Делфи и в Паскале для Виндовс функции обратного вызова специфицировались именно как export.


guav   (2006-08-24 02:20:00) [14]

[3] Чапаев ©   (23.08.06 23:14)
> Вместо stdcall напиши export.

И всё равно работать не будет. Пусть лучше на вопросы в [4] ответит.


Германн   (2006-08-24 01:53:00) [15]


> Это стандартный пример написанный на более поздней версии
> Делфи.
> В первой версии нет директивы stdcall, а без нее приложение
> не работает.

А где ты нашел сей пример, позволь тебя спросить? И для чего? И что ты хочешь сделать?


Чапаев   (2006-08-23 23:14:00) [16]

> В первой версии нет директивы stdcall, а без нее приложение
> не работает.

Дети, дети... Вместо stdcall напиши export.


Так себе   (2006-08-23 22:24:00) [17]

Например,

program Small;

uses
 Windows, Messages, Sysutils;

{$R *.res}

var
 Instance: HWnd;
 WindowClass: TWndClass;
 Handle: HWnd;
 Msg: TMsg;
 //
 procedure DoExit;
 begin
  Halt;
 end;
 //
  function WindowProc(Hwn,msg,wpr,lpr: Longint): Longint; stdcall;
 begin
  Result := DefWindowProc(hwn,msg,wpr,lpr);
  if msg = wm_destroy then
   DoExit;
  if msg = wm_KeyDown then
   if wpr = VK_ESCAPE then
    DoExit;
 end;

begin
//
instance := GetModuleHandle(nil);
//
WindowClass.style := CS_HRedraw or CS_VRedraw;
WindowClass.Lpfnwndproc := @windowproc;
WindowClass.Hinstance := Instance;
WindowClass.HbrBackground := color_btnface;
WindowClass.LpszClassName := 'DX';
WindowClass.Hcursor := LoadCursor(0,IDC_ARROW);
//
RegisterClass(WindowClass);
//
Handle := CreateWindowEx(0,'DX','',WS_POPUP,1,1,200,200,0,0,Instance,nil);
ShowWindow(Handle, SW_SHOW);
UpdateWindow(Handle);
//
//
while (GetMessage(msg,0,0,0)) do
begin
 translatemessage(msg);
 dispatchmessage(msg);
end;
end.

Это стандартный пример написанный на более поздней версии Делфи.
В первой версии нет директивы stdcall, а без нее приложение не работает.


Германн   (2006-08-23 01:33:00) [18]

ПППеревведи. (ц)
А при чём тут собсс-но stdcall?


Наверх

Титульная страница Поиск, карта сайта Написать письмо