DELPHI 기본 튜토리얼: 파일 관리(2)[4]
하위 창의 메인 메뉴에는 파일의 기본 관리 기능을 완료하는 데 사용되는 파일 기능 디렉토리, 기타 관리 기능 및 디렉토리 관리 기능의 세 가지 메뉴 항목이 포함되어 있습니다.
여기에서는 대화 상자 인터페이스 디자인이 매우 간단하기 때문에 자세한 내용을 설명하지 않고도 독자가 디자인을 위해 나중에 제공되는 대화 상자 인터페이스 다이어그램(그림)을 직접 참조할 수 있습니다.
하위 창 생성, 레이아웃 및 닫기
p>
하위 창의 생성, 레이아웃 및 레이아웃은 상위 창에 의해 결정됩니다. 창의 Windows 메뉴에서 제어하는 메뉴 항목은 다음과 같습니다.
● 새 창 : 새 하위 창 생성
● 타일: 타일
● 캐스케이드: 캐스케이드
● AlignIcon: 아이콘 정렬
● 최소화됨 All: 모든 하위 창 최소화
하위 창 생성에는 본문의 간단한 호출 창 Create 메소드만 필요합니다.
FileMan := TFMForm Create (Application)
하위 창의 표준 배열은 MDI 창 Tile Cascade 및 AlignIcons의 표준 방법을 직접 호출합니다.
모든 하위 창을 최소화하는 구현에서는 MDI 창의 두 가지 속성인 MDIChildCount 및 MDIChildren을 사용합니다.
p>
for i := to MDICount do
MDIChildren[i] Windowsstate := wsMinimized;
하위 창이 닫힐 때 메모리 공간을 해제하려면 OnClose에서 주문하세요. 하위 창의 이벤트 TFMForm
Action := OnFree;
Windows 파일 관리자와의 연결을 유지하려면 일관성을 위해 마지막 하위 창을 닫는 것도 금지해야 합니다. 하위 창의 OnCloseQuery 이벤트 처리 중에 구현됩니다.
If FileManager MDIChildCount <= then
CanClose := False
p>
CanClose; OnCloseQuery 이벤트 프로세스에 의해 반환된 매개 변수이며 창을 닫을 수 있는지 여부를 결정하는 데 사용됩니다.
이 프로세스는 하위 창에 속하므로 개체 이름 FileManager 앞에 MDIChildCount가 와야 합니다.
하지만 안타깝게도 우리 프로그램은 종료될 수 없습니다! MDI 창이 닫히기 전에 먼저 모든 하위 창을 닫아야 합니다. 하위 창이 닫히지 않으면 MDI 창도 닫힐 수 없습니다.
이러한 이유로 우리는 하위 창의 시스템 메뉴 또는 메뉴의 종료 항목이 종료 메시지를 보내는지 확인해야 합니다.
전역 변수 정의
var
ExitClick : Boolean;
하위 창의 Exit Click 이벤트 처리 중
ExitClick := True
FileManager Exit Click (Sender)
이 전역 변수를 사용하면 하위 창이 닫히기 전에 닫혀야 하는지 여부를 감지할 수 있습니다.
If (FileManager MDIChildCount <= ) and (Not ExitClick) then
CanClose := False;
파일 제어 연결
이 예에서는 드라이브 디렉터리를 표시하고 선택하기 위해 새 컨트롤 설정 TabSet DirectoryOutline FileListBox를 사용합니다.
( )에서 사용된 방법과 비교하여 이 컨트롤 세트를 사용하려면 약간의 코드 지원이 필요합니다.
TabSet과 DirectoryOutline 간의 연결은 TabSet의 Click 이벤트를 처리하는 동안 설정됩니다.
DriveTabSet do
DirectoryOutline Drive := Tabs[TabIndex][ ]
DirectoryOutline과 FileListBox 간의 연결은 DirectoryOutline의 변경 이벤트 처리 중에 설정됩니다.
FileList Directory := DirectoryOutline Directory;
FileList Update;
DriveTabSet의 자체 그리기 스타일 표시
Dephi는 일부 컨트롤에 대해 자체 그리기 스타일 표시를 제공합니다. ListBox ComboBox TabSet 등과 같은 기본적으로 이 컨트롤은 자동으로 텍스트를 표시하며 자체 그리기 스타일의 컨트롤이 있는 양식은 런타임 중에 컨트롤의 각 항목을 자체적으로 그립니다.
일반적인 자체 그리기 스타일 표시의 적용은 텍스트 외에 항목을 추가하는 것입니다. 자체 그리기 스타일로 그래픽을 표시할 수 있는 컨트롤은 모두 TStrings 클래스의 특성으로 인해 동일한 기능을 갖습니다. (3장 참조) 모두 해당 텍스트와 관련된 개체를 추가할 수 있습니다. 이것이 바로 자체 그리기 스타일을 표시하는 핵심입니다.
일반적으로 자체 그리기 스타일을 생성하려면 세 단계가 필요합니다. 그리기 스타일
자체 그리기 스타일 설정
문자열 연결 목록에 그래픽 개체 추가
p>자체 그리기 프로젝트 그리기
자체 그리기 스타일 설정
컨트롤 속성 Style은 자체 그리기 스타일을 설정하는 데 사용됩니다. DriveTabSet의 경우 Style 속성을 tsOwnerDraw로 설정합니다.
TabSet의 컨트롤과 약간 다른 ListBox ComboBox와 같은 컨트롤은 독자가 온라인 도움말 문서를 참조할 수 있습니다.
문자열 연결 목록에 그래픽 개체 추가
그림 구성 요소를 응용 프로그램
이 프로그램에서는 세 개의 그림 구성 요소 NetWork Floppy 고정을 설정하고 이를 세 개의 비트맵 파일 NetWork bmp Floppy bmp 고정 bmp와 각각 연결합니다.
그림을 문자열 연결 목록에 추가합니다< / p>
문자열 연결리스트의 특성에 따라 객체와 기존 문자열 사이에 연결을 설정할 수도 있고, 문자열과 객체를 동시에 추가할 수도 있습니다. 여기서는 후자의 방법을 사용합니다
하위 창의 OnCreate에서 이벤트 처리 중에 루프를 사용하여 a부터 z까지의 드라이브 존재 여부와 드라이브 유형을 순차적으로 감지합니다. 이는 Windwos API 함수인 GetDrivetype을 사용합니다. 드라이브가 없으면 드라이브 유형(DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE)을 반환합니다. 드라이브 유형에 따라 추가하는 동안 텍스트(드라이브 이름)와 동시에 탭에 추가된 다양한 그래픽 개체를 확인할 수 있습니다. 과정에서 DriveTabSet의 TabIndex가 현재 드라이브로 설정됩니다.
프로그램 목록은 다음과 같습니다.
절차 TFMForm FormCreate (Sender : TObject)
var p>
Drive AddedIndex: Integer;
DriveLetter: Char
begin
for Drive := 할 일
begin;
DriveLetter := Chr(Drive + ord( a ))
case GetDrivetype(Drive) of
DRIVE_REMOVABLE:
AddedIndex := DriveTabSet Tabs AddObject(DriveLetter Floppy 그림 그래픽)
DRIVE_FIXED:
AddedIndex := DriveTabSet Tabs AddObject(DriveLetter 고정 그림 그래픽)
DRIVE_REMOTE:
AddedIndex := DriveTabSet Tabs AddObject (DriveLetter Neork Picture Graphic)
end
if UpCase (DriveLetter) = UpCase (FileList Drive) then
DriveTabSet TAbIndex := AddedIndex;
end;
end;
자체 그리기 항목 그리기
컨트롤 스타일을 다음과 같이 설정할 때 Windows는 더 이상 책임을 지지 않습니다. self-draw 컨트롤의 항목을 화면에 그리는 대신, 표시되는 각 항목에 대해 자체 그리기 이벤트가 생성됩니다. 애플리케이션은 자체 그리기 이벤트를 처리하여 컨트롤의 항목을 그릴 수 있습니다.
항목 자체 그리기
TabSet의 경우 이는 OnMeasureTab 이벤트 처리 중에 수행되며, 텍스트와 비트맵을 동시에 맞출 수 있을 만큼 DriveTabSet의 각 레이블 너비를 늘려야 합니다.
TFMForm DriveTabSetMeasureTab 절차(Sender: TObject; Index: Integer;
var TabWidth: Integer)
var
BitmapWidth: Integer;
시작
BitmapWidth := TBitmap ( DriveTabSet Tabs Objects[Index]) 너비
Inc (TabWidth + BitmapWidth)
end; >
TStrings의 Objects 속성에 저장된 객체는 모두 TObject이므로 해당 유형에는 Width 속성이 없으므로 TBitmap 유형의 객체로 변환해야 합니다.
BitmapWidth := TBitmap ( DriveTabSet 탭 개체[색인]) 너비
DELPHI 기본 튜토리얼
? 편집자 추천
?
? J EE 고급 프레임워크 실습 교육 동영상 튜토리얼
Visual C++ 오디오/비디오 기술 개발 및 실습
Oracle 인덱스 기술
ORACLE G 데이터베이스 개발 및 최적화 가이드
Java 프로그램 성능 최적화를 통해 Java 프로그램을 더 빠르고 안정적으로 만들 수 있습니다.
p>C 임베디드 프로그래밍 디자인 패턴
Android 게임 개발 실습 가이드 lixixinzhi/Article /프로그램/델파이/201311/25239