Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

NoteBook 

Включение/Выключение закладки Notebook II

Delphi 2 

В обработчике события OnChange вашего TTabbedNotebook разместите код примерно такого содержания:

if (NewTab = 0) and (IWantToDisableTab0) then AllowChange := False;

if (NewTab = 1) and (IWantToDisableTab1) then AllowChange := False;

Да,

можно использовать конструкцию Case, но If в данном случае я посчитал удобнее.

OutLine 

Раскрытие пути к элементу TOutline по его индексу

Delphi 1 

Когда я писал этот код, у меня была цель по индексу TOutlineNode (который являлся результатом поиска) раскрыть его путь (т.е. раскрыть дочерние узлы, ведующие к нему), не затрагивая при это остальные узлы. 

Следующая процедура в качестве параметра принимает индекс, после чего раскрывает путь к элементу с этим индексом. 

Процедура подразумевает работу с объектом TOutline, имеющим имя Outline.

var Outline: TOutline;

procedure TSearchDlg.ExpandPathToFoundItem(const FoundItemIndex: Longint);

{------------------------------------------------------------------------------

 Открываем путь к данному элементу (элемент определяется номером индекса).

 До корневого элемента необходимо раскрывать только родителей.

 -----------------------------------------------------------------------------}

var

 ItemIndex: Longint;

 Found: Boolean;

 LastCh: Longint;

 Path: String;

 ItemText: String;

 SepPos: Integer;

 OldSep: String;

begin

 {Сохраняем старый ItemSpearator}

 OldSep:=Outline.ItemSeparator;

 {Устанавливаем новый ItemSeparator}

 Outline.ItemSeparator:='\';

 {Получаем полный путь к TOutlineNode и добавляем '\'. Это делается для упрощения последующего алгоритма}

 Path:=Outline.Items[FoundItemIndex].FullPath+'\';

 {Зацикливаемся до тех пор, пока не будет достигнут конец пути}

 while Length(Path) > 0 do begin

{Определяем в пути позицию первого '\'}

SepPos:=Pos('\',Path);

{Изолируем элемент TOutlineNode}

ItemText:=Copy(Path,1,SepPos-1);

{Определяем индекс TOutlineNode}

ItemIndex:=Outline.GetTextItem(ItemText);

{Раскрываем
его}

Outline.Items[ItemIndex].Expand;

{Вырезаем из строки раскрытый TOutlineNode}

Path:=Copy(Path,SepPos+1,Length(Path)-SepPos+1);

 end;

 {Восстанавливаем оригинальный ItemSeparator}

 Outline.ItemSeparator:=OldSep;

end;

Детали

Давайте присвоим элементу желаемый путь:

"My Computer\Hardware\SoundCard\Base Adress"

На первом шаге возвращается приведенный выше путь. Затем изолируется подстрока «My Computer». Затем с помощью метода «GetTextItem» определяется индекс TOutlineNode «My Computer». Метод «Expand» раскрывает это дерево. Впоследствие «My Computer» вырезается из пути, и новым путем становится «Hardware\SoundCard\Base Adress».

Затем определяется индекс «Hardware», раскрывается, и снова выразается. Данная процедура повторяется до тех пор, пока не останется пути, который можно раскрыть. После чего полностью раскрывается путь передаваемой TOutlineNode.

PageControl 

Динамические PageControl/TabSheet I

Delphi 2 

Динамическое создание Page Control'ов и Tab Sheet'ов:

var

 T : TTabSheet;

 P : TPageControl;

begin

 // Создаем PageControl

 // При создании получаем ссылку на PageControl, чтобы в дальнейшем на него ссылаться.

 P := TPageControl.Create(application);

 with P do begin

Parent := Form1; // устанавливаем его как элемент управления формы.

Top := 30;

Left := 30;

Width := 200;

Height := 150;

 end; // with tpagecontrol

 // Создаем 3 страницы

 T := TTabSheet.Create(P);

 with T do begin

Visible := True; // Это необходимо, или форма не будет корректно перерисовываться

Caption := 'Страница 1';

PageControl := P; // Назначаем Tab в Page Control

 end; // with

 T := TTabSheet.Create(P);

 with T do begin

Visible := True; // Это необходимо, или форма не будет корректно перерисовываться

Поделиться с друзьями: