Delphi FAQ - 1
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 над всеми прочими средствами
разработки |
|