Q&A

  • 한수부탁드립니다.
데이타베이스에 있는 자료를 밑에 있는것처럼 한 화면에 rect로 10개가 있으면 10개를 그려주고 20개가 있으면 20개를 그려주게 했는데요.

물론 프로그램은 돌아가는데요. 각각의 사각형 위에다 마우스를 올려놓으면

버튼에서 flat을 true한 효과처럼 화면에서 버튼이 위에 있다는 이벤트를 주고 싶은데

정말 어떻게 해야할지 막막합니다.'

제발 고수님들 한수 부탁드립니다.



type

TMoniteringObject = record

moRect : TRect; //Rect

moColor : TColor; //Color

moText : String; //Text

moGubun : String; //Rtu Dvr 구분 R, D

moIcon : TIcon;

moClk : Boolean; //Click



moManageZone : String[10]; //관리지역code

moSetupZone : String[10]; //국사위치code

moMachianName : String[32]; //장비이름

moMachianId : String[32]; //장비 id

moTSPort : Integer; // TS Port

moTSIP : String[20]; // TS IP

moTime : Integer; // 감시 주기

moTotPort : Integer; //Port or Channel 수

moModem : Boolean; //Modem 접속 유무

moPCip : String[20]; //관리PC Ip

moAttr : Integer; //속성

moAlamLevel : Integer; //Alam level

end;

구조체를 이렇게 만들고,그리고 화면에 뿌려주기위해서 다음 프로시져를 사용했습니다.

procedure TfMonitering.pMakeScreen;

var

I, J, iRight : Integer;

cRect : TRect;

begin

btn_Refresh.Enabled := False;

Image1.Height := 569;

Image2.Height := Image1.Height;

giBack := 0;

giObjectTot := 0;

Left := fMainToolBar.pPos.x;

Top := fMainToolBar.pPos.y;



pTotCount := pSelectQuery;



if pTotCount = 0 then begin

Application.MessageBox('Data 가 존재하지 않습니다.', '알림', MB_OK);

btn_Refresh.Enabled := True;

Exit;

end;



cRect := Image2.ClientRect;

Image2.Canvas.Brush.Color := clWhite;

Image2.Canvas.FillRect(cRect);





SetLength(MoniteringObject, pTotCount);

SetRect(drRect, 15, 10, 136, 53);



with Query do begin

Close;

Open;

First;

while not EOF do begin

(****************************************************************************

(

( RTU

(

(****************************************************************************)

if Trim(Query.FieldByName('alrias').AsString) <> '' then begin

if giObjectTot + 1 <> 1 then begin

drRect.Left := drRect.Left + 120;

drRect.Right := drRect.Right + 120;

end;



if ((((giObjectTot) mod 9) = 0) and (giObjectTot + 1 <> 1)) then begin

drRect.Top := drRect.Top + 42;

drRect.Bottom := drRect.Bottom + 42;

drRect.Left := 15;

drRect.Right := 136;

if giObjectTot + 1 > 104 then begin

Image1.Height := Image1.Height + 60;

Image2.Height := Image1.Height;

end;

end;

CopyRect(MoniteringObject[giObjectTot].moRect, drRect);



if giObjectTot + 1 = 1 then

MoniteringObject[giObjectTot].moClk := True

else MoniteringObject[giObjectTot].moClk := False;



MoniteringObject[giObjectTot].moGubun := 'R';

MoniteringObject[giObjectTot].moText := ' '+Query.FieldByName('Alrias').AsString;

MoniteringObject[giObjectTot].moMachianId := Query.FieldByName('ID').AsString;

MoniteringObject[giObjectTot].moMachianName := Query.FieldByName('MACHINENAME').AsString;

MoniteringObject[giObjectTot].moManageZone := Query.FieldByName('MANAGEZONE').AsString;

MoniteringObject[giObjectTot].moSetupZone := Query.FieldByName('SETUPZONE').AsString;

MoniteringObject[giObjectTot].moTotPort := Query.FieldByName('MACHINEPORT').AsInteger;

MoniteringObject[giObjectTot].moTime := Query.FieldByName('MONITERTIME').AsInteger;

MoniteringObject[giObjectTot].moTSIp := Query.FieldByName('TSIP').AsString;

MoniteringObject[giObjectTot].moTSPort := Query.FieldByName('TSPORT').AsInteger;



if Query.FieldByName('ISMODEMCON').AsInteger = 0 then

MoniteringObject[giObjectTot].moModem := True

else if Query.FieldByName('ISMODEMCON').AsInteger = 1 then

MoniteringObject[giObjectTot].moModem := False;



MoniteringObject[giObjectTot].moAlamLevel := Query.FieldByName('SEVERITY').AsInteger;

case MoniteringObject[giObjectTot].moAlamLevel of

1 : MoniteringObject[giObjectTot].moColor := clRed;

2 : MoniteringObject[giObjectTot].moColor := $004080FF;

3 : MoniteringObject[giObjectTot].moColor := $0080FFFF;

4 : MoniteringObject[giObjectTot].moColor := clAqua;

else

MoniteringObject[giObjectTot].moColor := $006DB675;

end;

MoniteringObject[giObjectTot].moAttr := Query.FieldByName('ATTRIBUTE').AsInteger;

Inc(giObjectTot);

end;

(****************************************************************************

(

( DVR

(

(****************************************************************************)



if Trim(Query.FieldByName('Dvr_alrias').AsString) <> '' then begin

if giObjectTot + 1 <> 1 then begin

drRect.Left := drRect.Left + 120;

drRect.Right := drRect.Right + 120;

end;



if ((((giObjectTot) mod 9) = 0) and (giObjectTot + 1 <> 1)) then begin

drRect.Top := drRect.Top + 42;

drRect.Bottom := drRect.Bottom + 42;

drRect.Left := 15;

drRect.Right := 136;

if giObjectTot + 1 > 104 then begin

Image1.Height := Image1.Height + 60;

Image2.Height := Image1.Height;

end;

end;

CopyRect(MoniteringObject[giObjectTot].moRect, drRect);



if giObjectTot + 1 = 1 then

MoniteringObject[giObjectTot].moClk := True

else MoniteringObject[giObjectTot].moClk := False;



MoniteringObject[giObjectTot].moGubun := 'D';

MoniteringObject[giObjectTot].moText := ' '+Query.FieldByName('Dvr_Alrias').AsString;

MoniteringObject[giObjectTot].moMachianId := Query.FieldByName('DVR_ID').AsString;

MoniteringObject[giObjectTot].moMachianName := Query.FieldByName('DVR_Name').AsString;

MoniteringObject[giObjectTot].moPCIp := Query.FieldByName('DVR_IP').AsString;

MoniteringObject[giObjectTot].moTotPort := Query.FieldByName('DVR_CHN').AsInteger;

MoniteringObject[giObjectTot].moSetupZone := Query.FieldByName('DVR_POS').AsString;

MoniteringObject[giObjectTot].moManageZone := Query.FieldByName('DVR_ZONE').AsString;

MoniteringObject[giObjectTot].moAttr := Query.FieldByName('DVR_Attr').AsInteger;

MoniteringObject[giObjectTot].moAlamLevel := Query.FieldByName('DVR_AramLevel').AsInteger;

case MoniteringObject[giObjectTot].moAlamLevel of

1 : MoniteringObject[giObjectTot].moColor := clRed;

2 : MoniteringObject[giObjectTot].moColor := $004080FF;

3 : MoniteringObject[giObjectTot].moColor := $0080FFFF;

4 : MoniteringObject[giObjectTot].moColor := clAqua;

else

MoniteringObject[giObjectTot].moColor := $006DB675;

end;

Inc(giObjectTot);

end;



Next;

end;

end;

Image1.Invalidate;

Invalidate;

btn_Refresh.Enabled := True;

end;

이것은 화면에 9행으로 뿌려주는 코딩입니다.

제발 도움주세요.





0  COMMENTS