Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Память уходит


Автор: CatFromSummer 11.2.2008, 14:37
Исходные данные:

Программа следящая чтобы другая была загружена и при необходимости перегружающая её. Код не сложный см. ниже. Результат получился в 510кб EXE. В памяти оно при старте около 1,5Мб. При перегрузке программы накидывается еще несколько десятков Кб. 

Подскажите пожалуйста где у меня возможна ошибка и как можно уменьшить занимаемое в памяти место. Если возможно решение не на Delphi, а на чем то другом с меньшими затратами памяти, подскажите в личку.

Код программы. Для скрытия основной программы используется RXTrayIcon.

Код

unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, ExtCtrls, Menus, ShellApi, StdCtrls, Buttons, ImgList,
  RXShell;

type
  TToonelCheck = class(TForm)
    PopupMenu: TPopupMenu;
    Timer: TTimer;
    ApplicationEvents: TApplicationEvents;
    btnExit: TBitBtn;
    Label1: TLabel;
    mRestore: TMenuItem;
    RxTrayIcon: TRxTrayIcon;
    ImageList: TImageList;
    mSeparator: TMenuItem;
    mExit: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure mRestoreClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ApplicationEventsMinimize(Sender: TObject);
  private
    { Private declarations }
   procedure CheckAndLoadToonel;
  public
    { Public declarations }
  protected
    { Protected declarations }
  end;

var
  ToonelCheck : TToonelCheck;
  h           : hwnd;

implementation

{$R *.dfm}

procedure TToonelCheck.CheckAndLoadToonel;
begin
 if not (FindWindow(nil, 'toonel.net') <> 0) then
  begin
   if not FileExists(ExtractFilePath(Application.ExeName)+'toonel.jar') then
    ShowMessage('toonel.jar не найден в каталоге программы.')
   else
    begin
     ShellExecute(h, 'open', 'toonel.jar', nil, nil, SW_MINIMIZE);
    end;
  end
 else
  begin
   // ShowMessage('Окно найдено');
  end;
end;

procedure TToonelCheck.FormCreate(Sender: TObject);
begin
 CheckAndLoadToonel;
end;

procedure TToonelCheck.TimerTimer(Sender: TObject);
begin
 CheckAndLoadToonel;
end;

procedure TToonelCheck.btnExitClick(Sender: TObject);
begin
 Application.Terminate;
end;

procedure TToonelCheck.mRestoreClick(Sender: TObject);
begin
 Application.Restore;
end;

procedure TToonelCheck.FormShow(Sender: TObject);
begin
 ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TToonelCheck.ApplicationEventsMinimize(Sender: TObject);
begin
 ShowWindow(Application.Handle,SW_HIDE);
end;

end.

Автор: Elfebet 11.2.2008, 15:27
юзай винапи

Автор: Alexeis 11.2.2008, 15:37
CatFromSummer, да для простых прог подойдет и WinApi. Но удобнее писать на KOL (Delphi7). 
А вообще см. http://forum.vingrad.ru/index.php?show_type=forum&showtopic=82845
100 раз обсудалось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)