faqs.org.ru

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

© faqs.org.ru