Новичок
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 28.10.2009
Репутация: нет Всего: нет
|
Доброго всем времени суток! Ребята помогите, ничего не знаю .... В окне изображена модель самолета. Зянятые места закрашиваются особым цветом. Можно "занять" любое место щелчком мыши на незанятом месте и освободить щелчком на занятом месте. В дилоговом окне задаются настройки. Что смог то сделал, а вот как перерисовать именно то место на которое щелкнули мышой я не вкуриваю никак .... Код |
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
|