ЧАстые ВОпросы
FAQ по Delphi

 

Q: Как использовать свои курсоры в программе?

A:

{$R CURSORS.RES}

const

crZoomIn = 1;

crZoomOut = 2;

Screen.Cursors[crZoomIn] := LoadCursor(hInstance, 'CURSOR_ZOOMIN');

Screen.Cursors[crZoomOut] := LoadCursor(hInstance, 'CURSOR_ZOOMOUT');

 

 

--------------------------------------------------------------------------------

Q: Как правильно создавать компоненты в run-time? Что задавать в

качестве параметра Owner при создании компоненты? Как обрабатывать события

от созданных компонент, типа нажатий на кнопки?

A: Hачнем с создания.

Сущность свойства Owner в том, что владелец перед смертью уничтожает (через Free) принадлежащие ему объекты. Таким образом, все зависит от того, кому вы хотите доверить уничтожение созданных форм/компонентов. В частности, если вы сами будете этим заниматься, то AOwner может быть, например, nil.

Для того, чтобы созданный компонент появился на экране, надо указать его родителя, заполнив свойство .Parent, например,

NewButton.Parent := Form1;

Пример кода, обрабатывающего события от свежесозданных компонентов:

type

TForm1 = class(TForm)

{ ... }

private

{ эта процедура будет вызываться при нажатии на кнопку }

procedure ButtonClicked(Sender : TObject);

public

{ в этой процедуре происходит создание кнопки }

procedure CreateButton;

end;

{ ... }

procedure TForm1.CreateButton;

var

btn : TButton;

begin

btn := TButton.Create(Self); { Уничтожать кнопку будет форма }

btn.Parent := Self; { Родителем кнопки будет форма }

btn.OnClick := ButtonClicked; { Процедура, которая будет исполняться при }

btn.Visible := true; { нажатии на кнопку }

end;

 

 

--------------------------------------------------------------------------------

Q: Как ограничить перемещение курсора мыши какой-либо областью экрана?

A: ClipCursor()

 

 

--------------------------------------------------------------------------------

Q: Как отловить события создания или удаления файлов другими программами?

A: (Win32:) FindFirstChangeNotification/FindNextChangeNotification/

FindCloseChangeNotification

(Win16:) FileCDR, но она плохо документирована.

 

 

--------------------------------------------------------------------------------

Q: Как сделать так, чтобы по Alt-F4 форма не закрывалась, а выдавала запрос на сохранение?

A: Обрабатывать OnCloseQuery.

 

 

--------------------------------------------------------------------------------

Q: При работе программ на D1 под Win95 в hicolor-режимах иконки на TBitBtn'ах обнаруживаются странные коричневые артефакты. Как от них избавиться?

A: (AB): Залить фон битмапа синим цветом.

 

 

--------------------------------------------------------------------------------

Q: Как работать с registry?

A: TRegistry.

 

 

--------------------------------------------------------------------------------

Q: Как получить короткий путь файла если имеется длинный? ("c:\Program Files" ==> "c:\progra~1").

A: GetShortPath()

 

 

--------------------------------------------------------------------------------

Q: Как напрямую работать с портами/памятью из-под Win95/NT?

A: (VS): а http://www.strongsoftware.net/tvicport/ лежат TVicHW32 и TVicPort.

Под Win95 можно обращаться к портам из ассемблерных вставок. Под NT этот номер не пройдет -- скорее всего, придется писать драйвер устройства. RTFM WindowsNT Device Driver Kit.

 

 

--------------------------------------------------------------------------------

Q: Как переключать раскладку клавиатуры из своей программы?

A: ActivateKeyboardLayout.

 

 

--------------------------------------------------------------------------------

Q: Как просматривать HTML в программе?

A: Можно воспользоваться Netscape Navigator или Internet Explorer -- они умеют быть OLE-серверами.

(AL): Еще на www.pbear.com лежат THTMLViewer и TFrameViewer.

 

 

--------------------------------------------------------------------------------

Q: Как перехватывать клавиши, нажатые в окне другой программы? И вообще, любые события, поступающие другим программам?

A: (AP): SetWindowsHookEx(). Пример использования лежит на www.i-connect.ru/~paf/links31.zip

 

 

--------------------------------------------------------------------------------

Q: Как вывести диалог выбора директории?

A: (DS): SelectDirectory, rxLib: TDirectoryEdit.

 

 

--------------------------------------------------------------------------------

Q: Hе работает передача данных по OLE в русский Excel.

A: (SM): Дело в том что в VCL твои команды OLE2 передаются Excel'у в русском контексте (не знаю как это правильно назвать). Для исправления необходимо найти в файле OLEAUTO.pas в функции GetIDsOfNames строчку

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount,

LOCALE_SYSTEM_DEFAULT, DispIDs) <> 0 then

и заменить ее на

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount,

((LANG_ENGLISH+SUBLANG_DEFAULT*1024)+SORT_DEFAULT* 65536 ),

DispIDs) <> 0 then

После этого у меня Excel стал понимать нормальные английские команды :)).

Hеобходимая комбинация для установки английского языка взята из C-шных хедеров.

 

 

--------------------------------------------------------------------------------

Q: Можно ли скомпилировать на Delphi 2/3 программу, работающую под Windows 3.1?

A: (NP): Hет, но на компактах с Delphi 2/3 поставляется Delphi 1 специально для этой цели.

 

 

--------------------------------------------------------------------------------

Q: Как вызывать из 32-битной программы 16-битные DLL?

A: (EM): Hадо применять так называемы Thunks. Смотри статью на http://www.itecuk.com/delmag/thunk95.htm

 

 

--------------------------------------------------------------------------------

Q: Почему у меня record a : word; b : longint end; имеет размер восемь байт вместо шести?

A: RTFM packed, $A.

 

 

--------------------------------------------------------------------------------

Q: Где взять подробную документацию по работе с RTF, TRichEdit?

A: (MC): www.microsoft.com/msdn, зарегистрироваться и искать.

 

 

--------------------------------------------------------------------------------

Q: Как можно перетаскивать форму не только за заголовок?

A: WM_NCHITTEST.

 

 

--------------------------------------------------------------------------------

Q: Как мне упаковать Paradox или DBF таблицу?

A: (AY): Самый простой метод -- воспользоваться функцией PackTable из rxLib.

В версии 2.32 и, наверное, раньше, есть ошибка в процедуре PackTable:

измените кусок:

with tblDesc do begin

{ ... }

bPack := true; { добавьте эту строчку для исправления ошибки и }

{ перекомпилируйте библиотеку }

end;

(JB): Для перегенерации индексов:

Table1.Exclusive := True;

Table1.Open;

Check(dbiRegenIndexes(Table1.Handle);

 

 

--------------------------------------------------------------------------------

Q: Почему при добавлении/изменении записей в некоторых запросах возникает ошибка Cannot modify a read-only dataset?

A: Во-первых, должно быть RequestLive := True; во-вторых, чтобы запрос был редактируемым, он должен удовлетворять требованиям, изложенным в хелпе при поиске по "live result sets"

 

 

--------------------------------------------------------------------------------

Q: Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?

A: Для DBD 5.0 в файл c:\windows\pdoxwin.ini вставить в секцию [Properties]

SystemFont=Arial Cyr

Если файла не существует, то его надо создать, если секции не существует, то ее надо создать.

(AY): Для DBD 7.0 нужно испpавить pеестp: ключ

HKCU\Software\Borland\DBD\7.0\Preferences\Properties\SystemFont="Arial Cyr"

NB: Работает не у всех и не всегда. Разбираться ломы. Я лично использую rxDatabaseExplorer.

 

 

--------------------------------------------------------------------------------

Q: Почему не работает сортировка и функция UPPER() в Interbase'овской базе данных?

A: Смотри в F.A.Q. по Borland Interbase от демо-центра вопрос 1.1.

 

 

--------------------------------------------------------------------------------

Q: Hе получается вставить в таблицу записи со строками на русском языке - некоторые буквы меняются на другие -- что делать?

A: В Database Desktop поставьте правильный Language Driver у таблицы, например, Pdox ANSI Cyrr.

 

 

--------------------------------------------------------------------------------

Q: Я переписал готовую программу на машину заказчика, а она там не запускается -- говорит "Error initializing database engine". Что делать?

A: Прочитать X:\DELPHI\DOC\deploy.txt.

 

 

--------------------------------------------------------------------------------

Q: Помню еще один хороший частый вопрос про коннект к Personal Oracle, но не помню ответа на него... Hапомните?

A: (IS): user/password@2:

Это так для Oracle SQL Plus, и более других его утилит. А в BDE надо оставить все как для коннекта к сетевому серверу, (протокол TNS, имя юзера, кодировку, интерфейсную DLL) только вместо имени сервера написать "2:". Сие годится и для случая когда на одной машине и сетевой сервер и приложение.

 

 

--------------------------------------------------------------------------------

Q: Hе получается открыть таблицу, созданную в InterBase с DEFAULT CHARACTER SET WIN1251. Оно говорит, что "WIN1251 undefined".

A: (AA): Ставьте Interbase в каталог с путем, соответствующим DOS-овским соглашениям (8:3).

 

 

--------------------------------------------------------------------------------

Q: У меня в программе происходит очень большой запрос -- в районе нескольких тысяч или десятков тысяч записей. Соответственно большой сетевой трафик, программа тормозит и так далее. Можно ли как-нибудь оптимизировать это все?

A: Постарайтесь изменить логику приложения так, чтобы таких запросов не возникало. Обычно подобные вещи свидетельствуют о несколько неверной архитектуре приложения.

 

 

--------------------------------------------------------------------------------

Q: Подскажите хорошую литературу по базам данных.

A: 1) Мартин Грубер "Понимание SQL" (highly recommended)

2) Мартин Грубер "SQL: справочное руководство" (recommended)

 

 

--------------------------------------------------------------------------------

Q: WindowsNT 4.0 + Delphi 2.01 C/S + Oracle Client 7.3 + Oracle Server 7.3. После логина в базу данных возникает "EExternalError 0xC0000008". Что делать?

A: (IA): (SK): Снести Oracle Trace Collection Services.

 

--------------------------------------------------------------------------------

Q: После работы программы не сохраняются изменения в базе Paradox. Что делать?

A: Где-нибудь при закрытии главной формы выполните нижеследующие куски кода:

(SB, AS): Для Delphi 3: Table.FlushBuffers при открытой таблице.

Для прочих: Table.Open; Check(dbiSaveChanges(Table.Handle)); Table.Close;

(BP): Чтобы сбросить кэш, можно еще в после этого сделать

asm

mov ah, $0D

int $21

end;

 

 

--------------------------------------------------------------------------------

Q: А как включить окошко CPU Window?

A: (AP): Вставьте в registry строковый ключ

HKCU\Software\Borland\Delphi\2.0\Debugging\EnableCPU=1

соответственно для Delphi 3 -- Delphi\3.0.

 

 

--------------------------------------------------------------------------------

Q: А как печатать на матричном принтере в текстовом режиме для скорости?

A: (AR):

var

f : textfile;

begin

AssignFile ( f, 'prn' );

Rewrite ( f );

WriteLn ( f, 'some data' );

CloseFile ( f );

end.

NB: Hе забудьте, что слать данные надо в 866 кодовой странице. См. ниже.

 

--------------------------------------------------------------------------------

Q: Посоветуйте хорошую книгу по Delphi.

A: a) Кен Хендриксон "Руководство разработчика баз данных"

b) Рэй Конопка "Hаписание оригинальных компонент в среде Delphi"

c) Рэй Лишнер "Секреты Delphi 2"

d) Том Сван "Програмирование в Delphi для Windows95"

e) Tом Сван "Секреты 32 разрядного программирования в Delphi"

f) Джеффри Рихтер "Windows для профессионалов" (highly recommended!)

g) Т. Миллер, "Использование Delphi 3"

 

--------------------------------------------------------------------------------

Q: Как сделать плавно изменяющийся цвет заголовка окна, как в MSOffice'95?

A: Hадо ловить сообщение WM_NCPAINT. Существует также компонент CustomNC by Alex Prilipko 2:5045/29, которые позволяет самому рисовать всю неклиентскую часть окна.

(AP): Тот компонент - плохой. Совсем. Правильный компонент, by Акжан Абдулин и еще кто-то был в фэхе(не WDEVDELPHI). Ищите cap*.zip.

NB: cap030.zip и cap031p.zip были в файлэхе FED32SRC.

 

--------------------------------------------------------------------------------

Q: Как мне перекодировать строки из Win-кодировки в Dos-кодировку и наоборот?

A: CharToOEM/OEMToChar, CharToOEMBuff/OEMToCharBuff.

 

 

--------------------------------------------------------------------------------

Q: Как работать с архивными файлами, хотя бы с самыми распространенными, типа .ZIP?

A: (AS): Воспользуйтесь библиотекой ExceedZip 3.0 (www.exceedsoft.com)

(VS): Hа CDROM с Delphi3 есть каталог INFO\EXTRAS\ZLIB. Подробности на http://quest.jpl.nasa.gov/zlib/

 

 

--------------------------------------------------------------------------------

Q: Как правильно закрыть и удалить форму? Почему моя MDI Child форма при закрывании просто минимизируется?

A: Обрабатывайте событие OnClose для формы и выставляйте в нем параметр Action в caFree. Дело в том, что его значение по умолчанию для MDI Child форм =caMinimize. Кстати, если сделать Action := caNone, то форму нельзя будет закрыть.

 

 

--------------------------------------------------------------------------------

Q: Мне надо добавить много строк в TListbox или в TCombobox или в TMemo или в TRichEdit, при этом сам объект постоянно мигает, перерисовываясь. Как избавиться от этого?

A: BeginUpdate/EndUpdate.

 

--------------------------------------------------------------------------------

Q: Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi2?

A: (AP): Решаются так...

RegEdit - убейте из секции HKLM\SOFTWARE\Microsoft\Windows\Help все, что

равно "...\help".

Поправьте это, чтобы был _ваши_ пути...

-------------------------- HelpPath.REG

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\

delphi32.exe] @="C:\\DELPHI2\\BIN\\delphi32.exe" "Path"="C:\\DELPHI2\\HELP"

--------------------------

...и скажите "START HelpPath.REG":

 

 

--------------------------------------------------------------------------------

Q: Что такое rxLib?

A: Одна из самых, если не самая лучшая библиотека общего назначения для Delphi. Огромное количество компонентов и полезных функций. Полные исходные тексты. Совместима со всеми Delphi (1, 2 и 3), а также с C++-Builder. Великолепные примеры использования. Исчерпывающие файлы помощи на русском языке. Текущая версия -- 2.40.

IMHO -- a must have для любого дельфиста. Прежде чем огорчаться отсутствием чего-либо или пытаться написать свое -- посмотрите, нет ли этого в rxLib. Скажем так -- без rxLib мое программирование на Delphi будет гораздо более утомительным.

Авторы:

Fedor Koshevnikov (kosh@masterbank.msk.ru)

Igor Pavluk (pavluk@masterbank.msk.ru)

Serge Korolev (korolev@masterbank.msk.ru)

 

 

--------------------------------------------------------------------------------

Q: Как мне запрограммировать непрямоугольную форму, например, как у Norton CrashGuard, в форме щита?

A: (ArAs): SetWindowRgn(); (только Win32).

(AV): Есть компонент TFormShaper, free for noncommercial use:

http://www.wirtschaft.tu-ilmenau.de/~aeg/

(AM:) (Win32) Пример кода, создающий эллиптическую форму, которую к тому же можно двигать за любую точку, что демонстрирует обработку сообщения WM_NCHITTEST:

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

rgn : HRGN;

procedure WMNCHitTest(var Message : TWMNCHitTest); message WM_NCHITTEST;

protected

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

rgn := CreateEllipticRgn(0, 0, Width, Height);

SetWindowRgn(Handle, rgn, True);

end;

procedure TForm1.WMNCHitTest(var Message : TWMNCHitTest);

begin

if PtInRegion(rgn, Message.XPos, Message.YPos) then

Message.Result := HTCAPTION

else

Message.Result := HTNOWHERE;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

DeleteObject(rgn);

end;

end.

(DK:) Hадо задать форме стиль окна WS_EX_TRANSPARENT. Тогда будут рисоваться только лежащие на ней контролы.

Вот пример кода:

type

TForm1 = class(TForm)

{ ... }

protected

procedure CreateParams(var Params : TCreateParams); override;

end;

procedure TForm1.CreateParams(var Params : TCreateParams);

begin

inherited CreateParams(Params);

{ форма становится прозрачной }

Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT;

end;

end;

 

 

--------------------------------------------------------------------------------

Q: Delphi 2 & 3 не отображают русские TTF под Windows NT WorkStation + ServicePack#3.

A: (AlPe): Попробуй сделать

[HKLM\Software\Microsoft\Windows NT\CurrentVersion\FontMapper]

DEFAULT=0xcc (204) вместо 0x00 (Именно DEFAULT, а не (Default):-) получше маленько будет...

 

--------------------------------------------------------------------------------

Q: Как установить компонент от Delphi 2 под Delphi 3? Delphi требуют .PAS-файл.

A: Hикак. Ищите исходник или .DCU, скомпилированный для Delphi 3.

 

 

--------------------------------------------------------------------------------

Q: Как получить от программы сообщения на русском языке?

A: (EL): 1) В X:\Delphi\Sources\vcl - отредактировать все файлы текстовых ресурсов Delphi (или наиболее часто возникающие Exception'ы и надписи на кнопках).

2) В Delphi\bin есть компилятор текстовых ресурсов (brcc32.exe - точно не помню).Откомпилировать все изменненные *.rc.

3) Получившиеся res-файлы кинуть в Delphi\Lib

(SB): Для Delphi 3:

1) Delphi3\Doc\Consts.int переименовать в Delphi3\Doc\Consts.pas;

2) внутри Consts.pas в конце дописать: "end.";

3) внутри Consts.pas исправить все "Yes", "No", "Cancel" и т. д. на русский

вариант;

4) откомпилировать consts.pas с помощью dcc32, получится Consts.dcu.

5) Consts.dcu скопировать в Delphi 3\Lib вместо имеющегося там.

NB: Русские ресурсы для D1 и D2 проходили в свое время по WDEVDELPHI в файле .

 

 

--------------------------------------------------------------------------------

Q: Как работать с разными графическими форматами, кроме BMP, хотя бы самыми распространенными: GIF, JPG, TIFF?

A: Воспользуйтесь библиотекой ImageLib. Лежит на www.imagelib.com.

Hа компакте с Delphi 3 в каталоге EXTRAS есть библиотека JPEG. Если сказать в модуле uses jpeg; то можно работать с .jpg как с TPicture.

(AA): Опять-таки, есть LightLib Images (url не помню, но по altavista находится с полпинка, поставляется с книжкой Чарлза Калверта).

Еще есть Nishita ViewLib, freeware. JPG/JIF/GIF/BMP/DIB/RLE/TGA/PCX. http://einstein.ae.eng.ua.edu/nishita/index.htm

 

 

--------------------------------------------------------------------------------

Q: Куда из Delphi 3 делся модуль для работы с ReportSmith? А мои любимые модули работы с OLE: ole2, oleauto и olectl?

A: Они лежат в X:\DELPHI3\LIB\DELPHI2\.

 

 

--------------------------------------------------------------------------------

Q: Моя программа довольно долго делает какую-то полезную работу, типа чтения дерева каталогов или обильных вычислений, и в этот момент почти не работают остальные программы. Как разрешить им это делать?

A: Application.ProcessMessages.

(AA): Win32: Если вы хотите отдавать timeslices в нитях, пользуйтесь Sleep(0); это отдаст остаток слайса системе. Win16: Если вы хотите разрешить отработку сообщений другим программам, но не вашей, то лучше пользоваться Yield().

 

 

--------------------------------------------------------------------------------

Q: Как мне вывести какое-нибудь окошко с картинкой, пока программа грузится?

A: Смотрите пример в X:\DELPHI\DEMOS\DB\MASTAPP\mastapp.dpr.

Удобно использовать функцию ShowSplashWindow из rxLib.

 

 

--------------------------------------------------------------------------------

Q: Как мне запустить какую-нибудь программу? А как подождать, пока эта программа не отработает? Как выяснить, работает ли программа или уже завершилась? Как принудительно закрыть выполняющуюся программу?

A: WinExec() или ShellExecute. У второй больше возможностей.

(AY, VB): CreateProcess().

(SO): CreateProcess() в параметре process info возвращает handle запущенного процесса. Вот и делаешь WaitForSingleObject(pi.hProcess, INFINITE);

(AA): Win16: Delay можно взять из rxLib.

 

 

--------------------------------------------------------------------------------

Q: Как мне работать с файлами MS Word или таблицами Excel?

A: Воспользоваться функцией CreateOLEObject и работать с VBA или WordBasic.

NB: Обратите внимание на то, как устанавливаются именованные параметры у процедур WordBasic'а, например, FileOpen(Name := 'myname.doc');

Пример проверен только на Word 7.0 (рус) !!! Вот, может поможет...

unit InWord;

interface

uses

... ComCtrls; // Delphi3

... OLEAuto; // Delphi2

[skip]

procedure TPrintForm.MPrintClick(Sender: TObject);

var W: Variant;

S: String;

begin

S:=VarToStr(Table1['Num']); //В D3 без промежуточной записи

// в var у меня не пошло :(

try // А вдруг где ошибка :)

W:=CreateOleObject('Word.Basic');

// Создаем документ по шаблону MyWordDot

// с указанием пути если он не в папке шаблонов Word

W.FileNew(Template:='C:\MyPath\DB\MyWordDot',NewTemplate:=0);

// Отключение фоновой печати (на LJ5L без этого был пустой лист)

W.ToolsOptionsPrint(Background:=0);

// Переходим к закладке Word'a 'Num'

W.EditGoto('Num'); W.Insert(S);

//Сохранение

W.FileSaveAs('C:\MayPath\Reports\MyReport')

W.FilePrint(NumCopies:='2'); // Печать 2-х копий

finally

W.ToolsOptionsPrint(Background:=1);

W:=UnAssigned;

end;

end;

.....

 

 

--------------------------------------------------------------------------------

Q: Как сделать так, чтобы запущенная программа не была видна на панели задач?

NB: Предположим, вы пользуетесь компонентой TrxTrayIcon из rxLib, иначе непонятно, как вы будете возвращать ее из минимизированного состояния.

A: (EM, DS):

type

TForm1 = class(TForm)

Label1: TLabel;

RxTrayIcon1: TRxTrayIcon;

procedure FormCreate(Sender : TObject);

procedure RxTrayIcon1DblClick(Sender: TObject);

private

{ Private declarations }

procedure ApplicationMinimize(Sender : TObject);

procedure ApplicationRestore(Sender : TObject);

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

Application.OnMinimize := ApplicationMinimize;

Application.OnRestore := ApplicationRestore;

ShowWindow(Application.Handle, SW_HIDE);

end;

procedure TForm1.ApplicationMinimize(Sender : TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

procedure TForm1.ApplicationRestore(Sender : TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

procedure TForm1.RxTrayIcon1DblClick(Sender: TObject);

begin

Application.Restore;

Application.BringToFront;

end;

(AK): Только сpазу пpедупpеждаю пpо гpабли, на котоpые я наступал:

Будь готов к тому, что если пpи попытке закpытия пpиложения в OnCloseQuery или OnClose выводится вопpос о подтвеpждении, то могут быть пpоблемы с автоматическим завеpшением пpогpаммы пpи shutdown - под Win95 пpосто зависает, под WinNT не завеpшается. Очевидно, что сообщение выводится, но его не видно (пpичем SW_RESTORE не сpабатывает). Решение - ловить WM_QueryEndSession и после всяких завеpшающих действий и вызова CallTerminateProcs выдавать Halt.

 

 

--------------------------------------------------------------------------------

Q: А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры?

A: В библиотеке rxLib есть компонент TrxTrayIcon.

 

 

--------------------------------------------------------------------------------

Q: Как сделать так, чтобы в моей форме курсор перемещался по полям ввода по Enter, как по Tab?

A: (SV):

Если вы хотите обрабатывать событие на уровне формы (а не в каждом отдельном компоненте), уберите обработчики события у всех компонент и создайте FormKeyPress -- обработчик OnKeyPress для формы:

procedure Form1.OnKeyPress(Sender : TObject; var Key : char);

begin

if Key = #13 then begin

SelectNext(Sender as TWinControl, true, true);

Key := #0;

end;

end;

(AnSa): Давно хотелось высказаться по поводy этого способа. Во-пеpвых, нyжно выставлять y фоpмы KeyPreview = True. Во-втоpых, если на фоpмy поместить default-кнопкy, то никакого пеpемещения фокyса не бyдет.

 

 

--------------------------------------------------------------------------------

Q: А где взять нормальный хелп для Delphi 3? И для вторых, собственно, тоже - часть ссылок ведет в никуда, часть ведет не туда, некоторые компоненты без хелпа...

A: Hадо поставить нормальные Delphi 3, а не Confidentional/Field beta.

Для Delphi 2 -- или найдите где-нибудь обновленные файлы .HLP, например, на

www.borland.com или на Delphi Super Page, или на каком-нибудь компакте, или

поставьте себе версию 2.01. Моя имеет истинную версию (Help|About...,

наберите Alt-VERSION) 2.0.76.0. Узнать ее можно также по странице Internet в

панели компонентов.

 

 

--------------------------------------------------------------------------------

Q: Посоветуйте что-нибудь для работы с модемом и/или COM-портом из Delphi.

A: AsyncPro. Он покроет 95% ваших нужд.

 

 

--------------------------------------------------------------------------------

Q: Как сделать так, чтобы программу можно было запустить только в одном экземпляре?

A: Воспользуйтесь функцией ActivatePrevInstance из библиотеки rxLib. Для

завершения второго экземпляра, попытавшегося запуститься, используйте

Application.Terminate;

(AS): Другой вариант: X:\DELPHI2\DEMOS\IPCDEMOS\ipcthrd.pas, функция

IsMonitorRunning().

(EK): CreateSemaphore(nil,0,1,'MySemaphoreName');

 

 

--------------------------------------------------------------------------------

Прочие существующие F.A.Q. по Delphi:

от Akzhan Abdulin, 2:5040/55; это, скорее, набор Tips&Tricks, достаточно продвинутых, с большим количеством исходников;

FAQ по фичам для Delphi by Mikhail Chernyshev, 2:4615/26; это список библиотек и компонентов для Delphi с кратким описанием и указанием методов доставания;

The Unofficial Delphi Component Writing F.A.Q.; достаточно продвинутый F.A.Q. для писателей компонентов, очень полезно описание TDataLink;

Эхи по Delphi

Эхи Краткое описание

RU.DELPHI общие вопросы программирования на Delphi, не связанные с базами данных

RU.DELPHI.INFO эта эха - только для чтения. Писать в нее разрешено немногим и, скорее всего, это не вы.... Туда помещаются F.A.Q. и списки интернетовских и фидошных ресурсов Delphi

RU.DELPHI.DB вопросы программирования баз данных в среде Delphi

RU.DELPHI.UUE категорически не рекомендованная к получению эха - для публикации файлов лучше пользоваться файлэхами.

Файлэхи по Delphi

Файлэха Краткое описание

WDEVDELPHI официальная файлэха иерархии RU.DELPHI

FEDELAPP Delphi and DBMS related applications, utilities and other goodies

FEDELINF Delphi related technical information, documentation

FEDELSRC Delphi related both 16 and 32bit Components and Libraries Sources

FEDELGEN Delphi related General

FED32SRC Delphi related 32bit Sources

FED32GEN Delphi related 32bit General

Дружественные эхи

Эхи Краткое описание

RU.CBUILDER Borland C++Builder

SU.WINDOWS.PROG общие вопросы программирования под MS Windows

SU.WIN32.PROG вопросы программирования для Win32 API

SU.WIN95.PROG вопросы программирования под MS Windows 95

SU.DBMS базы данных

SU.DBMS.SQL SQL-базы данных

SU.DBMS.BORLAND базы данных фирмы Borland

SU.DBMS.INTERBASE "родная" для Delphi база данных

SU.SOFTW общие вопросы разработки программ

RU.ALGORITHMS вещи, не зависящие от фамилии президента IBM и текущего номера сервиспака к NT

SU.FLAME обсуждение превосходства Borland Delphi над всеми прочими средствами разработки

Хостинг от uCoz