Главная > Программирование > Языки Pascal/Delphi > |
Общий FAQ по Delphi |
Секция 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 - Предыдущая - Следующая
Вернуться в раздел "Языки Pascal/Delphi" - Обсудить эту статью на Форуме |
Главная - Поиск по сайту - О проекте - Форум - Обратная связь |