Borland Delphi FAQ
Страница 10.



------------------------------------------------------------

Q-88:  Как сохранить всю форму в файл (как Delphi в *.dfm)?

------------------------------------------------------------
constructor TForm1.Create(AOwner: TComponent); // override;
var
  fname: String;
begin
  {
Для динамически создаваемых контролов, может требоваться
  RegisterClasses(..); }
  fname := FormFilename;
  if FileExists( fname ) then
    begin
      CreateNew(AOwner);
      ReadComponentResFile(fname, Self);
    end
  else
    inherited Create( AOwner );
end;

procedure TForm1.FormCloseQuery( Sender: TObject;
   var CanClose: Boolean);
begin
  WriteComponentResFile(FormFileName, Self);
end;

{Peter Below, Vladimir Titov}

------------------------------------------------------------

Q-89:  Как отследить переход фокуса в приложении?

------------------------------------------------------------
procedure TForm1.AppControlChange(Sender: TObject);
begin
   if Sender is TScreen then
     Caption := TScreen(Sender).ActiveForm.ActiveControl.Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange := AppControlChange;
end;

Leonid Troyanovsky <
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script >

------------------------------------------------------------

Q-90:  Как назначить процедуру собственному пункту системного меню?

------------------------------------------------------------
const
  cm_mycommand = $00A0;

procedure TForm1.FormCreate(Sender: TObject);
  var HSysMenu: HMENU;
begin
  HSysMenu:=GetSystemMenu(Handle,FALSE);
  InsertMenu( HSysMenu, 0, MF_BYPOSITION or MF_STRING,
              cm_mycommand, 'MyString');
end;

procedure TForm1.WMSysCommand (var Message:
  TWMSysCommand); // message WM_SYSCOMMAND;
begin
  case Message.CmdType of
    cm_mycommand: ShowMessage('My Command');
  else
    inherited;
  end;
end;

Leonid Troyanovsky <
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script >

------------------------------------------------------------

Q-91:  Какое сообщение надо отлавливать в Application.OnMessage для отслеживания клавиши Alt (vk_menu)

------------------------------------------------------------
WM_SYSKEYDOWN/WM_SYSKEYUP

------------------------------------------------------------

Q-92:  Как поменять иконку и стpокy в заголовке консольного окна?

------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  h : HWND;
  AIcon : TIcon;
begin
  AllocConsole;
  SetConsoleTitle(PChar('Console Title'));
  Sleep(0);
  h := FindWindow(nil, PChar('Console Title'));
  AIcon := TIcon.Create;
  ImageList1.GetIcon(0, AIcon);
  SendMessage(h, WM_SETICON, 1, AIcon.Handle);
  AIcon.Free;
end;

Leonid Troyanovsky <
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script >

------------------------------------------------------------

Q-93:  Как избежать повторного запуска моего приложения?

------------------------------------------------------------
constructor TYourMainForm.Create(AOwner: TComponent); // override;
var
  wndclass : String;
  PrevInstance : HWnd;
begin
  wndclass := ClassName;
  PrevInstance := FindWindow(PChar(wndclass), nil);
  if PrevInstance <> 0 then
  begin
    ShowMessage(Format('Main form %s is already exist', [wndclass]));
    Application.Terminate;
  end
  else
    inherited Create(AOwner);
end;

Такое окно существует и в IDE (запускать придется из Explorer).

Leonid Troyanovsky <
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script >

------------------------------------------------------------

Q-94:  Delphi 6 требует Proxies.pas?

------------------------------------------------------------
{$ifdef D_6_UP} //
Это моя константа
  DesignIntf, DesignEditors, DesignWindows, DsnConst,
{$else}
  DsgnIntf,
{$endif}

Eugene Mayevski <
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script >

------------------------------------

Вопрос: Файл designeditors.pas использует 'proxies' в uses.
Исходный текст (proxies.pas) или откомпилированный модуль (proxies.dcu)
нигде не находится ни на моем жеском диске ни на D6 Pro CD..

Просто реорганизуйте ваш проект на использование runtime пакетов и добавьте
"DesignIDE" к вашемк списку runtime пакетов. Proxies находится здесь, и вам
не нужен исходный текст вообще.

Почему это сделано? Просто доя уверенности, что вы не сможете распространять
design time части (property editors, component editors), это запрещено по
личензии. DesignIDE.bpl не является свободно распространяемым, вы имеете
право использовать его только на машине на которой установлена Delphi,
подобно Component libraries.

forums.borland.com

 
« Предыдущая статья   Следующая статья »