delphi Tcomponent 클래스 2
{ TComponent }
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;
procedure TComponent.InsertComponent(AComponent: TComponent);
begin
AComponent.ValidateContainer(Self);
ValidateRename(AComponent, , AComponent.FName);//
Insert(AComponent);// AComponent
AComponent.SetReference(True);
if csDesigning in ComponentState then
AComponent.SetDesigning(True);
Notification(AComponent, opInsert);//
end;
procedure TComponent.ValidateRename(AComponent: TComponent;
const CurName, NewName: string);
begin
if (AComponent <> nil) and not SameText(CurName, NewName) and
(AComponent.Owner = Self) and (FindComponent(NewName) <> nil) then
raise EComponentError.CreateResFmt(@SDuplicateName, [NewName]);
if (csDesigning in ComponentState) and (Owner <> nil) then
Owner.ValidateRename(AComponent, CurName, NewName);//
end;
procedure TComponent.ValidateContainer(AComponent: TComponent);
begin
AComponent.ValidateInsert(Self);
end;
procedure TComponent.ValidateInsert(AComponent: TComponent);
begin
end;
procedure TComponent.Insert(AComponent: TComponent);// TLIST
begin
if FComponents = nil then FComponents := TList.Create;
FComponents.Add(AComponent);
AComponent.FOwner := Self;//
end;
destructor TComponent.Destroy; file:// FFREENOTIFILES
begin
Destroying;
if FFreeNotifies <> nil then
begin
while Assigned(FFreeNotifies) and (FFreeNotifies.Count > 0) do
TComponent(FFreeNotifies[FFreeNotifies.Count - 1]).Notification(Self, opRemove);
FreeAndNil(FFreeNotifies);// , FFREENOTIFILES Notification,
end;
DestroyComponents;
if FOwner <> nil then FOwner.RemoveComponent(Self);
inherited Destroy;
end;
procedure TComponent.FreeNotification(AComponent: TComponent);// FFREENOTIFILES
begin
if (Owner = nil) or (AComponent.Owner <> Owner) then
begin
// Never acquire a reference to a component that is being deleted.
assert(not (csDestroying in (ComponentState + AComponent.ComponentState)));
if not Assigned(FFreeNotifies) then FFreeNotifies := TList.Create;
if FFreeNotifies.IndexOf(AComponent) < 0 then
begin
FFreeNotifies.Add(AComponent);
AComponent.FreeNotification(Self);
end;
end;
Include(FComponentState, csFreeNotification);
end;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.7 Tcomponent 분기
Tcomponent 분기는 Tcomponent가 아닌 Tcontrol에서 계승된 모든 VCL & CLX 종류를 포함합니다.이 분기의 대상에 대해 디자인할 때 창에서 직접 다시 조작할 수 있지만, 실행할 때 사용자에게 보이지 않습니다.이러한 객체는 다음과 같은 기능을 가진 지속적인 객체입니다.
n 구성 요소 패널에 나타나고 창의 무게를 변경할 수 있습니다
n다른 구성 요소 소유 및 조작
n 자체 로드 및 저장
Tcomponent가 도입한 몇 가지 방법은 구성 요소가 디자인할 때의 행동과 구성 요소에 따라 어떤 정보를 저장하는지를 가리킨다.흐름 기능 (창의 대상 속성을 저장하는 창 파일의 불러오기와 저장) 이 분기에 나타납니다.구성 요소의 발표 속성은 지속적이고 자동으로 '흐름' 으로 규정됩니다.
Tcomponent 분기도 소유권 개념을 도입했는데 이 개념은 구성 요소 라이브러리에서 나온 것이다.소유권은 Owner와 Components의 두 가지 속성으로 지원됩니다.각 구성 요소에는 소유자를 지정하는 Owner 속성이 있습니다.
하나의 구성 요소가 다른 구성 요소를 가지고 있을 수 있습니다. 이 경우, 모든 구성 요소가 이 구성 요소의Components 속성에 나타납니다.
모든 구성 요소의 구조기는 새 구성 요소의 소유자를 지정하는 매개 변수를 포함합니다.
이 도입된 소유자가 존재하면, 이 구성 요소는 자동으로 소유자의Components 속성에 추가됩니다.
Components 속성은 포함된 구성 요소 목록을 저장하는 것 외에 모든 구성 요소를 자동으로 방출할 수 있습니다.일단 하나의 구성 요소에 소유자가 생기면, 그 소유자가 풀리면, 그것도 자동으로 풀린다.
예를 들어 TForm은 Tcomponent를 계승하기 때문에 창이 소각될 때 그 안에 포함된 모든 구성 요소가 자동으로 소각되고 차지하는 메모리를 방출한다. (물론 모든 구성 요소는 자동으로 소각될 수 있도록 분석기를 정확하게 설계해야 한다.)
만약 속성 유형이 Tcomponent 또는 그 후예라면, 흐름 시스템이 그것을 읽을 때 자동으로 그 실례를 만들 것입니다.만약 하나의 속성 유형이 TPersistent이지 Tcomponent가 아니라면, 흐름 시스템은 이 속성을 통해 이미 존재하는 이 유형의 실례를 사용하고, 이 실례의 속성을 읽을 수 있습니다.
다음은 TComponent 분기의 일부 클래스입니다.
nTActionList, 동작 목록을 유지합니다. 이 동작 목록은 사용자의 입력에 반응할 수 있는 추상적인 동작을 제공합니다.
nTMainMenu, 창에 메뉴 표시줄 및 드롭다운 메뉴 제공
n TOpenDialog, TsaveDialog, TFontDialog, TFindDialog, TcolorDialog 등등 일반적인 대화상자를 제공하여 자신감을 표시하고 수집할 수 있습니다
n Tscreen, 프로그램이 만든 창 & 데이터 모듈, 활성 창, 창의 활성 구성 요소, 화면의 크기와 구성, 프로그램에서 사용할 수 있는 커서 및 글꼴 등 데이터를 추적하는 클래스입니다.
보기 인터페이스가 필요 없는 구성 요소는 일반적으로 Tcomponent 클래스에서 직접 나온다.TTimer 같은 구성 요소를 만들어야 한다면 Tcomponent를 직접 계승할 수 있습니다. 이 구성 요소들은 구성 요소 목록에 나타날 수 있지만, 디자인할 때의 시각적 인터페이스가 아니라 코드를 통해 내재적인 기능에 접근할 수 있습니다.사이즈의 훈리스트,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JSP 5강 - 액션태그, 자바빈클래스<%@ include %> => 디렉티브, 정적(내용이 고정) -파라미터 X <jsp: include> => 액션태그, 동적 - 파라미터O request 객체 -> request 클래스 존재(JSP에서 기본적으로 제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.