Секция 2 из 2 - Предыдущая - Следующая
программы.
A: В rxLib есть компонент TrxMathParser, достаточно мощный для
большого количества применений.
Q: Как уменьшить размер исполняемого файла программы?
A: Писать на WinAPI без использования VCL. Это пригодно для и без того
крохотных программ.
Воспользоваться пакетами (packages) из Delphi 3. Эффект появится,
когда исполняемых файлов больше одного.
Воспользоваться компрессорами исполняемых файлов, например: Shrinker
[47]http://www.blinkinc.com, WWPack32
[48]http://kolos.uni.lodz.pl/warezak, NeoLite
[49]ftp://ftp.zdnet.com/pub/private/sWlIB/utilities/other_utilities/ne
olitee.zip, Petite, [50]http://www.icl.ndirect.co.uk/petite/.
Q: Где достать всяких иконок, картинок для кнопок, etc. для своей
программы?
A: [51]http://www.iconbazaar.com
Q: Как сделать ping из своей программы? И вообще, посоветуйте
какую-нибудь альтернативу стандартным дельфовым Internet-компонентам.
A: Зайди на [52]http://www.rtfm.be/fpiette. Там кyча компонентов для
инета с исходниками. Там и ping есть.
_________________________________________________________________
Относительно большие ответы/примеры кода
Q: Как правильно создавать компоненты в run-time? Что задавать в
качестве параметра Owner при создании компоненты? Как обрабатывать
события от созданных компонент, типа нажатий на кнопки?
A: Начнем с создания.
Сущность свойства 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: Как мне работать с файлами MS Word или таблицами MS Excel?
A: Воспользоваться функцией CreateOLEObject и работать с VBA (Visual
Basic for Applications) или WordBasic.
NB: Обратите внимание на то, как устанавливаются именованные параметры
у процедур WordBasic'а, например, FileOpen(Name := 'myname.doc');
=== Cut Пример by Sergey Arkhipov 2:5054/88.10 ===
Пример проверен только на русском 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;
{.....}
=== Cut Конец примера ===
Q: Как сделать так, чтобы запущенная программа не была видна на панели
задач?
Во-первых, можно по примеру Back Orifice воспользоваться функцией
RegisterServiceProcess.
Во-вторых, предположим, вы пользуетесь компонентой 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и попытке закрытия приложения в
OnCloseQuery или OnClose выводится вопрос о подтверждении, то могут
быть проблемы с автоматическим завершением пpогpаммы пpи shutdown --
под Win95 просто зависает, под WinNT не завершается. Очевидно, что
сообщение выводится, но его не видно (причем SW_RESTORE не
сpабатывает). Решение -- ловить WM_QUERYENDSESSION и после всяких
завеpшающих действий и вызова CallTerminateProcs выдавать Halt.
_________________________________________________________________
Вопросы, связанные с программированием баз данных
Q: После работы программы не сохраняются изменения в базе Paradox. Что
делать?
A: Где-нибудь при закрытии главной формы выполните нижеследующие куски
кода:
Для Delphi 3: Table.FlushBuffers при открытой таблице.
Для прочих: Table.Open; Check(dbiSaveChanges(Table.Handle));
Table.Close;
Q: Как мне упаковать Paradox или DBF таблицу?
A: Воспользоваться функцией PackTable из rxLib.
Для перегенерации индексов:
Table1.Exclusive := True;
Table1.Open;
Check(dbiRegenIndexes(Table1.Handle);
Q: Почему при добавлении/изменении записей в некоторых запросах
возникает ошибка Cannot modify a read-only dataset?
A: Во-первых, должно быть RequestLive := True; во-вторых, чтобы запрос
был редактируемым, он должен удовлетворять требованиям, изложенным в
помощи при поиске по "live result sets".
Q: Почему не работает сортировка и функция UPPER() в Interbase'овской
базе данных?
A: Смотри в F.A.Q. по Borland Interbase от демо-центра.
Q: Не получается вставить в таблицу записи со строками на русском
языке -- некоторые буквы меняются на другие -- что делать?
A: В Database Desktop поставьте правильный Language Driver у таблицы,
например, Pdox ANSI Cyrr.
Q: Я переписал готовую программу на машину заказчика, а она там не
запускается -- говорит "Error initializing database engine". Что
делать?
A: Прочитать X:\DELPHI\DOC\deploy.txt.
Q: Как правильно соединяться с базой данных под Personal Oracle?
A: user/password@2: Это так для Oracle SQL Plus, и более других его
утилит. А в BDE надо оставить все как для соединения с сетевым
сервером, (протокол TNS, имя пользователя, кодировку, интерфейсную
DLL) только вместо имени сервера написать "2:". Это годится и для
случая, когда на одной машине и сетевой сервер и приложение.
Q: У меня в программе происходит очень большой запрос -- в районе
нескольких тысяч или десятков тысяч записей. Соответственно, большой
сетевой трафик, программа тормозит и так далее. Можно ли как-нибудь
оптимизировать это все?
A: Постарайтесь изменить логику приложения так, чтобы таких запросов
не возникало. Обычно подобные вещи свидетельствуют о несколько
неверной архитектуре приложения.
_________________________________________________________________
Последние изменения: Срд Ноя 3 22:58:10 MSK 1999
Сгенерировано [53]TEItools
References
1. mailto:alexm(at)hsys.msk.ru"
2. http://alexm.here.ru/
3. http://delphi.da.ru/
4. http://msdn.microsoft.com/
5. http://www.sysinternals.com/
6. http://www.iarchitect.com/
7. http://www.vireo.com/
8. http://www.entechtaiwan.com/tools.htm
9. http://www.bluewatersystems.com/
10. http://www.rxlib.com/
11. http://www.altavista.com/
12. http://ftpsearch.lycos.com/
13. http://www.dejanews.com/
14. ftp://bbs.ogo.ru/
15. http://www.rxlib.com/
16. http://www.dataweb.net/~r.p.sterkenburg
17. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#10_4
18. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#47_4
19. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#62_4
20. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#65_4
21. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#160_4
22. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#278_4
23. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#344_4
24. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#535_4
25. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#661_4
26. file://localhost/home/alexm/ru.delphi.f.a.q/ru.delphi.f.a.q.html#707_4
27. http://members.xoom.com/PolarisSoft/
28. http://www.sawatzki.de/
29. http://www.itecuk.com/delmag/thunk95.htm
30. http://delphi.da.ru/
31. http://www.imagelib.com/
32. http://einstein.ae.eng.ua.edu/nishita/index.htm
33. http://www.exceedsoft.com/
34. http://www.geocities.com/SiliconValley/1142/
35. http://www.signsoft.com/opengl
36. http://www.opengl.org/
37. http://reality.sgi.com/mjk
38. http://www.scitechsoft.com/
39. http://www.chami.com/tips/delphi/103096D.html
40. http://www.pbear.com/
41. http://www.tsinet.ru/~vg
42. http://www.cyclic.com/
43. http://alexm.here.ru/
44. http://www.dic.ru/users/rusov/
45. http://www.numega.com/
46. http://www.listsoft.ru/programs/pr1520.htm
47. http://www.blinkinc.com/
48. http://kolos.uni.lodz.pl/warezak
49. ftp://ftp.zdnet.com/pub/private/sWlIB/utilities/other_utilities/neolitee.zip
50. http://www.icl.ndirect.co.uk/petite/
51. http://www.iconbazaar.com/
52. http://www.rtfm.be/fpiette
53. http://xtalk.price.ru/SGML/TEItools/
Секция 2 из 2 - Предыдущая - Следующая
© faqs.org.ru