먼저 Delphi 메모리 대상이 있고, 나중에 핸들이 있으며, 마지막에 표시됩니다.

4266 단어
디자인 기간에 Panel1과 Button1을 놓고 Panel1을 설정합니다.Visible:=False
이때 실행:
procedure TForm1.Button4Click(Sender: TObject);
begin
  ShowMessage(IntToStr(panel1.InstanceSize));
end;
552를 받았습니다. 이것은 이 Panel1이라는 메모리 대상이 이미 존재한다는 것을 설명합니다.다시 그것의visible를true로 바꿀까요, 아니면 552를 얻을까요?이 메모리 대상은 이미 존재하고 크기가 다르지 않다는 것을 의미한다.
visible을false로 다시 바꾸고 다음 코드를 테스트합니다.
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (panel1.Handle=0) then
    ShowMessage('no handle')
  else
    ShowMessage('handled');
end;
결과는 항상 이미 문맥이 잡혔다는 것을 보여 준다.왜 그런 걸까요?컨트롤이 표시되지 않았을 때 HandleNeeded를 실행해야 합니다
procedure TWinControl.HandleNeeded;
begin
  if FHandle = 0 then
  begin
    if Parent <> nil then Parent.HandleNeeded;
    CreateHandle;
  end;
end;

function TWinControl.GetHandle: HWnd;
begin
  HandleNeeded;
  Result := FHandle;
end;
핸들 속성을 사용할 때 GetHandle 함수를 사용해 핸들을 순식간에 만들었기 때문에 어떻게 테스트해도 이미 핸들이 있기 때문이다.
그래서 측정하려면 FHandle을 테스트해야 한다.FHandle을private에서public로 바꿔야 합니다.그런 다음 테스트를 수행합니다.
procedure TForm1.Button1Click(Sender: TObject);
var
  panel1 : TPanel;
begin
  panel1:=TPanel.Create(nil);
  panel1.Left:=100;
  panel1.top:=100;
  if (panel1.FHandle=0) then
    ShowMessage('no handle')
  else
    ShowMessage('handled');
end;
이때의 결과는 바로 no handle이다.
디자인 기간은Panel1.visible에서 false로 변경하고 다시 테스트:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (panel1.FHandle=0) then
    ShowMessage('no handle')
  else
    ShowMessage('handled');
end;
그 결과도 no handle 입니다.
------------------------------------------------------------------------------------------------------------------------------------------
오류 코드 하나 더:
procedure TForm1.Button1Click(Sender: TObject);
var
  panel1 : TPanel;
begin
  panel1:=TPanel.Create(nil);
  panel1.Left:=100;
  panel1.top:=100;
  if (panel1.Handle=0) then
    ShowMessage('no handle')
  else
    ShowMessage('handled');
end;
갑자기 착오가 생기다.부모 컨트롤을 지정하지 않았는데Handle 속성의 GetHandle 방법을 실행하는 중 오류가 발생했기 때문입니다.사실 나는 이 잘못된 예에서 갑자기 깨닫고Panel1을 직접 사용했다.handle=0은 아직 그렇게 간단하지 않아요. 문제가 있어요. 이런 방법으로 판단해서는 안 돼요.
------------------------------------------------------------------------------------------------------------------------------------------
질문 하나 더 드릴게요. 디자인 기간에 Image1을 놓고 그림을 불러오는데visible에false로 설정하면 Image1이 메모리에 있는 상태는 어떻게 될까요?아직 잘 모르겠어요...

좋은 웹페이지 즐겨찾기