Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BPW и ObjectWindows 
V
    Опции темы
Shurikg
Дата 28.10.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Доброго всем времени суток!


Ребята помогите, ничего не знаю ....  smile 

В окне изображена модель самолета. Зянятые места закрашиваются особым цветом. Можно "занять" любое место щелчком мыши на незанятом месте и освободить щелчком на занятом месте. В дилоговом окне задаются настройки.

Что смог то сделал, а вот как перерисовать именно то место на которое щелкнули мышой я не вкуриваю никак ....

Код


program AIRBUS;
{$R MENU}
{$R DIALOG}

uses Objects, OWindows, ODialogs, WinTypes, WinProcs;

const
 cm_Exit = 101;
 cm_Setup = 102;
 cm_Help = 103;
 cm_Radio_1 = 201;
 cm_Radio_2 = 203;
 cm_Radio_3 = 205;
 h0 = 100;

type
 TBuffer=record
  Radio1:array[1..2] of word;
  Radio2:array[1..2] of word;
  Radio3:array[1..2] of word;
end;

type
 PMyAir=^PMyAirApp;
 PMyAirApp= object(TApplication)
 Procedure InitMainWindow; virtual;
end;

type
 PMyWindow = ^TMyWindow;
 TMyWindow=object(TWindow)
   buffer:TBuffer;
   constructor Init (AParent: PWindowsObject; ATitle: PChar);
   destructor Done; virtual;
   procedure Paint(DC:hDC; var info:TPaintStruct); virtual;
   procedure Setup(var Msg: TMessage); virtual cm_First + cm_Setup;
   procedure ExitProg(var Msg: TMessage); virtual cm_First + cm_Exit;
   procedure Help(var Msg: TMessage); virtual cm_First + cm_Help;
   Procedure KeyDown (var Msg: TMessage);virtual wm_First+wm_KeyDown;
end;

type
 PMyDialog = ^TMyDialog;
 TMyDialog = object(TDialog)
 constructor Init(Aparent:PWindowsObject; Resource:Pchar);
end;

var
AirApp:PMyAirApp;
i,ASize:integer;
ADC: word;
vid:byte;


Procedure PMyAirApp.InitMainWindow;
 begin
  MainWindow:=New(PMyWindow, INIT(nil, '╤рьюыхЄ'))
 end;

constructor TMyWindow.Init (AParent:PWindowsObject; ATitle:PChar);
 begin
  Inherited Init (Aparent, ATitle);
  Attr.X:=200; Attr.Y:=250;
  Attr.W:=800; Attr.H:=500;
  Attr.Menu:= LoadMenu(hInstance, 'MENU_AIR');
  FillChar(Buffer, SizeOf(Buffer), #0);
  for i:=1 to 2 do buffer.Radio1[i]:=0;
  for i:=1 to 2 do buffer.Radio2[i]:=0;
  for i:=1 to 2 do buffer.Radio3[i]:=0;
  Buffer.Radio1[1]:=bf_Checked;
  Buffer.Radio2[2]:=bf_Checked;
  Buffer.Radio3[1]:=bf_Checked;
 end;

constructor TMyDialog.Init (AParent:PWindowsObject; Resource:PChar);
var
 AControl: Pointer;
 begin
  Inherited Init (AParent, Resource);
  for i:=0 to 1 do AControl:=New(PRadioButton,InitResource(@Self,cm_Radio_1+i));
  for i:=0 to 1 do AControl:=New(PRadioButton,InitResource(@Self,cm_Radio_2+i));
  for i:=0 to 1 do AControl:=New(PRadioButton,InitResource(@Self,cm_Radio_3+i));
 end;

destructor TMyWindow.Done;
 begin
  TWindow.Done;
 end;

procedure TMyWindow.ExitProg(var Msg: TMessage);
 begin
  TMyWindow.Done;
 end;

procedure TMyWindow.Help(var Msg: TMessage);
 begin
  WinHelp(hWindow, 'help.hlp', help_Context, h0);
 end;

Procedure TMyWindow.KeyDown (var Msg: TMessage);
 begin
  if Msg.wParam = vk_F1 then
    WinHelp (hWindow, 'help.hlp', help_Context, h0)
  else DefWndProc(Msg);
 end;


procedure TMyWindow.Setup(var Msg:TMessage);
 var w:word;MyDialog:PMyDialog;i,e:word;
 PaintInfo: TPaintStruct;
 begin
  MyDialog:= New(PMyDialog,Init(@Self,'Dialog_AIR'));
  MyDialog^.TransferBuffer :=@Buffer;
  if Application^.ExecDialog(MyDialog)= 1 then
   begin
    for i:=1 to 2 do if buffer.Radio1[i]=bf_Checked then vid:=i-1;
    for i:=1 to 2 do if buffer.Radio2[i]=bf_Checked then vid:=i-1;
    for i:=1 to 2 do if buffer.Radio3[i]=bf_Checked then vid:=i-1;
    ADC := GetDC(HWindow);
    paint(ADC,PaintInfo);
    ReleaseDC (hWindow,ADC);
   end;
end;

procedure TMyWindow.Paint(DC:hDC; var Info:TPaintStruct);
var
Pen, OldPen:hPen;
Points: array[0..4] of TPoint;
x, y, R, G, B, RN, GN, BN : integer;
begin
 if (Buffer.Radio2[1]=bf_Checked) then
  begin
   R:=255;
   G:=0;
   B:=0
  end;
if (Buffer.Radio2[1]<>bf_Checked) then
  begin
   R:=0;
   G:=255;
   B:=0
  end;

 if (Buffer.Radio3[1]=bf_Checked) then
  begin
   RN:=181;
   GN:=186;
   BN:=176
  end;
if (Buffer.Radio3[1]<>bf_Checked) then
  begin
   RN:=75;
   GN:=38;
   BN:=221
  end;
 if (Buffer.Radio1[1]=bf_Checked) then
  begin
   Pen:=CreatePen (ps_Solid,1, RGB(0,255,0));
   OldPen:=SelectObject(DC,Pen);
    Rectangle(DC, 10, 10, 785, 435);
   SelectObject(DC,OldPen);
   DeleteObject(Pen);
   Pen:=CreatePen (ps_Solid,5, RGB(RN,GN,BN));
   OldPen:=SelectObject(DC,Pen);
   for i:=0 to 10 do
    begin
     x:=100 + i * 40;
     y:=120 + i * 40;
     RoundRect(DC, x, 100, y, 120, 7, 25);
     RoundRect(DC, x, 140, y, 160, 7, 25);

     RoundRect(DC, x, 220, y, 240, 7, 25);
     RoundRect(DC, x, 260, y, 280, 7, 25);
    end;
   SelectObject(DC,OldPen);
   DeleteObject(Pen);
 end;
 if (Buffer.Radio1[1]<>bf_Checked) then
  begin
   Pen:=CreatePen (ps_Solid,1, RGB(0,255,0));
   OldPen:=SelectObject(DC,Pen);
    Rectangle(DC, 10, 10, 785, 435);
   SelectObject(DC,OldPen);
   DeleteObject(Pen);
   Pen:=CreatePen (ps_Solid,5, RGB(RN,GN,BN));
   OldPen:=SelectObject(DC,Pen);
   for i:=0 to 15 do
    begin
     x:=100 + i * 40;
     y:=120 + i * 40;
     RoundRect(DC, x, 100, y, 120, 7, 25);
     RoundRect(DC, x, 140, y, 160, 7, 25);
     RoundRect(DC, x, 180, y, 200, 7, 25);

     RoundRect(DC, x, 260, y, 280, 7, 25);
     RoundRect(DC, x, 300, y, 320, 7, 25);
     RoundRect(DC, x, 340, y, 360, 7, 25);
    end;

   SelectObject(DC,OldPen);
   DeleteObject(Pen);
 end;

end;

begin
  AirApp.Init('AIRBUS');
  AirApp.Run;
  AirApp.Done;
end.



Это сообщение отредактировал(а) Rrader - 29.10.2009, 17:06

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  code.rar 28,38 Kb
PM MAIL   Вверх
Hexel
Дата 29.10.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 30.10.2007
Где: UA

Репутация: нет
Всего: нет



Мне одному эта конструкция кажется странной? или это потому, что я ее никогда не применял? модули странные, у меня таких ни в делфи ни в паскале нету.
на чем ты его писал? у меня Delphi6
PM MAIL   Вверх
Shurikg
Дата 29.10.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Цитата(Hexel @ 29.10.2009,  01:22)
Мне одному эта конструкция кажется странной? 
на чем ты его писал?

А что именно странно??

Используется : Barland Pascal for Windows v 7.0
PM MAIL   Вверх
Shurikg
Дата 2.11.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Вопрос снят. Нашел решение.   smile



Это сообщение отредактировал(а) Shurikg - 2.11.2009, 17:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.