Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Данное сообщение значение не возвращает.
Комментарии
Используйте сообщение EM_REPLACESEL, если вы хотите изменять только часть текста поля редактирования. Если вам нужно заменить весь текст, используйте сообщение WM_SETTEXT.
В случае отсутствия выбранного текста, замещающий текст вставляется в текущую позицию курсора.
(из справки по Windows API)Сделайте список с вашими стандартными фразами, и используйте события "OnClick" или "OnMouseDown" в комбинации с "Alt", "Shift" или "Ctrl". Пример: Когда пользователь нажимает клавишу "Alt" в комбинации с правой кнопкой мыши, выводится список заранее подготовленных фраз и выбранная вставляется в ваш TMemo-компонент.
Для вставки строки в Memo:
procedureTForm1.Button1Click(Sender: TObject);
begin
withMemo1 do begin
SelStart:=10;
SelLength:=0;
SelText:='Эта строка включается в Memo, начиная с 10-й позиции ';
end;
end;
Для вставки строки и замены некоторого существующего текста:
procedureTForm1.Button1Click(Sender: TObject);
begin
withMemo1 do begin
SelStart:=10;
SelLength:=20;
SelText:='Эта строка включается в Мемо, начиная с 10-й позиции и замещает собой 20 символов ';
end;
end;
Поместите текст, который вы хотите вставить, в переменную PChar, затем вставьте текст в Memo, используя команду SetSelTextBuf, где SelStart устанавливается в позицию курсора TMemo. Это классно работает.
Другая полезность: вы можете обхойти предел TMemo в 32K в случае, если вы загружаете в него текст, пользуясь методом/командой Lines.LoadfromFile. Компонент имеет внутренний предел в 32K. Если вы загружаете нужный файл в указатель, и используете команду/метод SetTexBuf, то в этом случае в TMemo можно загрузить текста вплоть до 64K.
NoteBook
Включение/Выключение закладки Notebook II
Delphi 2
В обработчике события OnChange вашего TTabbedNotebook разместите код примерно такого содержания:
if(NewTab = 0) and(IWantToDisableTab0) thenAllowChange := False;
if(NewTab = 1) and(IWantToDisableTab1) thenAllowChange := False;
…
Да, можно использовать конструкцию Case, но If в данном случае я посчитал удобнее.
OutLine
Раскрытие пути к элементу TOutline по его индексу
Delphi 1
Когда я писал этот код, у меня была цель по индексу TOutlineNode (который являлся результатом поиска) раскрыть его путь (т.е. раскрыть дочерние узлы, ведующие к нему), не затрагивая при это остальные узлы.
Следующая процедура в качестве параметра принимает индекс, после чего раскрывает путь к элементу с этим индексом.
Процедура подразумевает работу с объектом TOutline, имеющим имя Outline.
varOutline: TOutline;
procedureTSearchDlg.ExpandPathToFoundItem( constFoundItemIndex: 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+'\';
{Зацикливаемся до тех пор, пока не будет достигнут конец пути}
whileLength(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);
withP do begin
Parent := Form1; // устанавливаем его как элемент управления формы.
Top := 30;
Left := 30;
Width := 200;
Height := 150;
end; // with tpagecontrol
// Создаем 3 страницы
T := TTabSheet.Create(P);
withT do begin
Visible := True; // Это необходимо, или форма не будет корректно перерисовываться
Caption := 'Страница 1';
PageControl := P; // Назначаем Tab в Page Control
end; // with
T := TTabSheet.Create(P);
withT do begin
Visible := True; // Это необходимо, или форма не будет корректно перерисовываться
Caption := 'Страница 2';
PageControl := P; // Назначаем Tab в Page Control
end; // with
T := TTabSheet.Create(P);
withT do begin
Visible := True; // Это необходимо, или форма не будет корректно перерисовываться
Caption := 'Страница 3';
PageControl := P; // Назначаем Tab в Page Control
end; // with
// Создаем 3 кнопки, 1 на страницу
withtbutton.create(application) do begin
Parent := P.Pages[0]; // «Указываем» кнопке родительскую страницу
Caption := 'Привет, страница 1';
Left := 0;
Top := 0;
end; // with
withtbutton.create(application) do begin
Parent := P.Pages[1]; // «Указываем» кнопке родительскую страницу
Caption := 'Привет, страница 2';
Left := 50;
Top := 50;
end; // with
Интервал:
Закладка: