먼저 Delphi 메모리 대상이 있고, 나중에 핸들이 있으며, 마지막에 표시됩니다.
이때 실행:
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이 메모리에 있는 상태는 어떻게 될까요?아직 잘 모르겠어요...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.