Виртуальная библиотека Delphi
- Название:Виртуальная библиотека Delphi
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виртуальная библиотека Delphi краткое содержание
Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
23. Включение и выключение подсказок (Hints) для всех элементов на форме.
Если ваша форма содержит панель подсказки в нижней части формы, то вы можете определить подменю для этой панели, и выставлять Form.ShowHint в True или False в зависимости от состояния Checked элемента меню.
Например, в TMenuItem.OnClick напишите:
ShowHint := not(Sender asTMenuItem).Checked;
В результате на локальном меню панели будет видно, включены подсказки для всех элементов или нет.
24. Как в меню поместить bitmap?
Можно поступить таким образом:
var
Bmp1: TBitmap;
begin
Bmp1 := TBitmap.Create;
Bmp1.LoadFromFile( 'C:\WHERE\B1.BMP');
SetMenuItemBitmaps(MenuItemTest.Handle, 0, MF_BYPOSITION, Bmp1.Handle, Bmp1.Handle);
end;
Параметры:
• MenuItemTest — имя пункта меню (горизонтальная строка)
• 0,1 ... — позиция пункта меню, в который надо вставить BMP
• первый Handle — для показа невыбранного пункта меню (Unchecked)
• второй Handle — для выбранного (Checked). Они могут быть разные
Код можно вставить в обработчик OnCreate для формы. При уничтожении меню TBitmap не уничтожается, это надо делать отдельно.
25. Каким образом можно поместить двумерный массив в TImage?
Представим, что данные находятся в массиве:
TestArray: array[0..127, 0..127] ofByte;
Картинка будет иметь размер 128×128 точек:
Image1.Picture.Bitmap.Width := 128;
Image1.Picture.Bitmap.Height := 128;
Вызываем функцию Windows API для формирования bitmap:
SetBitmapBits(Image1.Picture.Bitmap.Handle, SizeOf(TestArray), @TestArray);
Image1.Refresh; { для того, чтобы изменения отобразились }
Однако, если вы используете свою палитру, то ее нужно создавать специально.
26. Как из программы 'открыть' TComboBox?
У TComboBox есть run-time свойство, не упомянутое в on-line help — DroppedDown .
Для открытия ComboBox напишите:
ComboBox1.DroppedDown := True;
Естественно, False закроет его.
27. Как заменить надпись 'Read only' в компонентах TSaveDialog и TOpenDialog?
Попробуйте посмотреть в Windows API Help разделы, связанные с lpTemplateName . Вообще говоря, вы можете заменить стандартный Open Dialog Box своим собственным шаблоном.
28. Проблема в использовании компонента TCustomGrid.

Делаю так:
1. Создаю новый компонент при помощи Эксперта Компонент
2. Имя класса TSampleCalendar
3. Имя родителя TCustomGrid
4. Использую страницу 'Samples'
5. Сохраняю модуль с именем CALSAMP.PAS
6. Подключаю к Палитре компонент
7. Создаю форму, помещаю новый компонент на форму и получаю Runtime Error 210 В чем дело?

Проблема в том, что TCustomGrid имеет метод DrawCell , который является абстрактным. То, что его безусловно надо переписывать у любого наследника TCustomGrid , к сожалению, не отражено в документации. Создайте этот метод (пусть даже пустой) и ваша проблема исчезнет.
29. Как установить формат для поля таблицы?
В Fields Editor выберите поле для форматирования. Используя свойства DisplayFormat и EditFormat сделайте то, что нужно. DisplayFormat работает для поля, на которое не установлен фокус. EditFormat работает для поля, на которое фокус установлен. Форматирование аналогично первому параметру в функции FormatFloat , но без скобок.
30. Можно ли использовать клавишу ENTER при вводе данных для перехода от поля к полю?
Используйте данный код для события OnKeyPress компонента TEdit .
procedureTForm1.Edit1KeyPress(Sender: TObject; varKey: Char);
begin
ifKey = #13 then
begin
SelectNext(Sender asTWinControl, True, True);
Key := #0;
end;
end;
Теперь Enter ведет себя как Tab. Затем, выберите все объекты, которые должны вести себя как Edit1 (за исключением кнопок) и в Object Inspector установите обработчик OnKeyPress в Edit1KeyPress . Каждый выбранный вами объект воспринимает Enter как Tab. Если вы хотите обрабатывать событие на уровне формы (а не в каждом отдельном компоненте), уберите обработчики события у всех компонент и создайте FormKeyPress — обработчик OnKeyPress для формы:
procedureTForm1.FormKeyPress(Sender: TObject; varKey: Char);
begin
ifKey = #13 then
begin
SelectNext(Sender asTWinControl, True, True);
Key := #0;
end;
end;
Все объекты на форме будут воспринимать Enter как Tab.
Общие вопросы по Delphi и данному FAQ (часть 3)
Object Pascal и Windows API
1. Как работает информация времени выполнения (RTTI)?
Имеются два новых оператора: asи is. as — оператор защищенного преобразования типов (typecasting). Вы можете использовать его, чтобы заставить компилятор преобразовать объект из одного типа в другой, но, если в во время выполнения эти типы окажутся несовместимыми, то вы получите ошибку. Hапример, если вы имеете класс TSport , с потомоками TBasketball и TFootball , вам может потребоваться переменная типа TSport ; далее может так случиться, что в программе эта переменная будет фактически содержать экземпляр типа TFootball . Тогда вы можете обратиться к этой переменной
(MySport asTFootball)
чтобы получить доступ к специфическим свойствам из типа TFootball . Однако, если вы ошиблись и на самом деле это экземпляр типа TBasketball , то при обращении к несуществующим свойствам будет возникать ошибка. Оператор isопределяет, принадлежит ли экземпляр объекта к данному классу, либо к классу одного из его предков, и используется для проверки, сработает ли преобразование типов с данным объектом. Если вы имеете переменную MySport типа TSport , и в настоящее время она содержит экземпляр TBasketball , тогда следующие выражения истинны:
(MySport isTSport)
(MySport isTBasketball)
not(MySport isTFootball)
Следует иметь ввиду, что компилятор разрешает использовать данные конструкции только для выполнения преобразования типов, связанных родственными отношениями. Так, конструкция (Button1 asTEdit) (переменная Button1 имеет тип TButton ) вызовет ошибку компиляции, так как ни при каких условиях не может быть выполнено преобразование типов от TButton к TEdit или наоборот. Комбинация двух операторов может привести к выражению типа следующего :
functionPlayerGoodness( varMySport: TSport): Integer;
begin
if(MySport isTBasketball) then
Result := (MySport asTBasketball).ReboundShots
else if(MySport isTFootball) then
Интервал:
Закладка: