
Как создать и вызвать модальный формуляр?
Модальные формуляры довольно часто выгоднее (с точки зрения
использования памяти) временно создавать, и после того,
как формуляр был вызван, отработан и закрыт, - освободить
его из памяти. В противном случае Delphi-приложение может
быть настоящим "пожирателем памяти". Примерно
так может выглядеть вызов такого формуляра:
ModalForm := TModalForm.Create(Self);
try
ModalForm.ShowModal;
finally
ModalForm.Free;
end;
Как различаются между собой Paint-события: Invalidate,
Update и Refresh?
Invalidate весь объект перерисовывается заново; обычно перерисовывается
только часть бывшая перед этим закрытой
Update незамедлительная перерисовка
Refresh Invalidate + Update
Как сделать отступ в Memo?
С помощью API-функции SendMessage можно задать поля в Memo-компоненте.
Если необходимо, например, сделать отступ в 20 пикселей
слева то можно это сделать следующим образом:
var Rect: TRect;
begin
SendMessage( Memo1.Handle, EM_GETRECT, 0, LongInt(@Rect));
Rect.Left:= 20;
SendMessage(Memo1.Handle, EM_SETRECT, 0, LongInt(@Rect));
Memo1.Refresh;
end;
Как можно опросить различные параметры системы,
например количество свободных ресурсов?
Для получения параметров системы существует множество различных
API-функций. Для того, чтобы узнать количество свободных
ресурсов, - достаточно вызова следующей API-функции:
Variable := GetFreeSystemResources(GFSR_SYSTEMRESOURCES);
Другие функции опроса параметров системы (описаны в системе
помощи): GetWinFlags, SystemParametersInfo, GetDeviceCaps
и GetFreeSpace.
Для 32-bit систем необходимо вызывать GetSystemMetrics,
GetSystemInfo и SystemParametersInfo
Как управлять табуляцией в Memo-компоненте?
Для этого необходимо поставить свойство "WantTabs"
в "True". Теперь для управления штртной табуляции
необходимо вызвать API-функцию SendMessage. В последнем
параметре функция ожидает указатель на массив с элементами
типа Word, в котором указаны позиции в единицах экрана.
Для примера вызов функции с указанием двух позиций табуляции:
procedure TForm1.FormCreate(Sender:TObject);
const
Tabs: array[0..1] of Word = (4, 8);
begin
SendMessage(Memo1.Handle, EM_SetTabStops, 2, LongInt(@Tabs));
end;
Как вызвать подсказку к подсказке?
В Delphi-приложении можно вызвать помощь в пользовании системой
помощи следующим образом:
Application.HelpCommand(Help_HelpOnHelp,
0);
Как перейти к указанной записи в БД?
Демонстрация перехода к указанной записи через задание номера
записи.
function TBDEDirect.GoToRecord(RecNo:
LongInt): Boolean;
var
RecCount: LongInt;
Bookmark: TBookmark;
Res: DBIResult;
begin
Result := False;
if CheckDatabase then
begin
if RecNo < 1 then
RecNo := 1;
RecCount := GetRecordCount;
if RecNo > RecCount then
RecNo := RecCount;
Res := DbiSetToRecordNo(FDataLink.DataSource.DataSet.Handle,
RecNo);
if Res = 0 then
begin
Bookmark := StrAlloc(GetBookmarkSize);
DbiGetBookmark(FDataLink.DataSource.DataSet.Handle,
Bookmark);
FDataLink.DataSource.DataSet.GoToBookmark(Bookmark);
FDataLink.DataSource.DataSet.FreeBookmark(Bookmark);
Result := True;
end
else
Check(Res);
end;
end;
Как проверять корректность доступа к базе данных?
Следующая функция проверяет доступ к базе данных и выдает
возможные причины, если доступ не удается осуществить. Функция
возвращает значение True в случае успешной операции и False
в противном случае.
function TBDEDirect.CheckDatabase:
Boolean;
var
DS: TDataSource;
begin
Result := False;
DS := GetDataSource;
if DS = nil then
begin
MessageDlg('Не установлена связь с элементом-источником
данных.'+
'Проверьте установку свойства DataSource.',
mtError, [mbOK], 0);
Exit;
end;
if DS.DataSet = nil then
begin
MessageDlg('Доступ к базе данных невозможен.', mtError,
[mbOK], 0);
Exit;
end;
if TDBDataSet(DS.DataSet).Database = nil then
begin
MessageDlg('Доступ к базе данных невозможен.', mtError,
[mbOK], 0);
Exit;
end;
if TDBDataSet(DS.DataSet).Database.Handle = nil then
begin
MessageDlg('Дескриптор (Handle) БД недоступен.', mtError,
[mbOK], 0);
Exit;
end;
if DS.DataSet.Handle = nil then
begin
MessageDlg('Дескриптор курсора (Cursor-Handle) недоступен.',
mtError,
[mbOK], 0);
Exit;
end;
Result := True;
end;