데이타베이스에 있는 자료를 밑에 있는것처럼 한 화면에 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행으로 뿌려주는 코딩입니다.
제발 도움주세요.