어렵다고 할 수 없는 문제가 영 안풀려서 질문드립니다.
Procedure와 Function을 올려놓은 Unit에 아래와 같은 Procedure를 만들었습니다.
Procedure DrawDisplayScale;
var YDeltaDisplayScale : integer;
ii : integer;
begin
with frmVSData do begin
Image4.Canvas.Pen.Color := PenColor;
Image4.Canvas.Pen.Width := PenWidthSupp;
Image4.Canvas.Brush.Color := BrushColor;
Image4.Canvas.Font.Color := PenColor;
Image4.Canvas.FillRect(Rect(0,0,50,220));
Image4.Canvas.MoveTo(48,0);
Image4.Canvas.LineTo(48,220);
YDeltaDisplayScale := Round(100.0*Yscale);
for ii := 1 to 10 do begin
Image4.Canvas.MoveTo(48,220-YDeltaDisplayScale*ii);
Image4.Canvas.LineTo(40,220-YDeltaDisplayScale*ii);
if ii < 10 then
Image4.Canvas.TextOut(15,213-YDeltaDisplayScale*ii,IntToStr(ii*100))
else
Image4.Canvas.TextOut(10,213-YDeltaDisplayScale*ii,IntToStr(ii*100));
end;
end;
end;
보시면 아시겠지만 frmVSData란 Form에 있는 Image4에 간단한 스케일을 그리는 기능입니다.
frmVSData는 VSData란 Unit에 딸린 Form이고요.
그런데 정작 VSData Unit의 FormCreate에서 DrawDisplayScale; 을 하면 동작을 하지않네요.
그 자리에 Procedure 내부에 있는 문장을 써넣으면 그때는 동작을 합니다.
또 하나 이상한 것은 VSData Unit의 FormCreated 외의 다른 부분과
VSData Unit이외 다른 Unit에서는 DrawDisplayScale;하면 동작을 한다는 것입니다.
Uses에도 문제는 없는 것으로 보이는데
어떤 경우에 이런 현상이 생길수 있는 것일까요?
FormCreate 부분은 컴포넌트의 생성을 주로 하는 부분이고
Form안에 있는 대부분의 컴포넌트는 보여지지 않고 있기 때문에 그려봐야 보이지 않습니다.
보통 그리는 부분은 OnPaint 나 OnShow 같은 부분에서 해줘야 하겠죠.