Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.06;
Скачать: CL | DM;

Вниз

Приложение типа панели MSOffice   Найти похожие ветки 

 
beaver ©   (2002-03-02 13:58) [0]

Нужно написать прогу вроде панели Офиса или панели задач Винды, то есть не только OnTop - это понятно, но и изменение рабочей области десктопа (для maximized). Я это сделал как-то простенько, но вот другие максимизированные приложения реагируют не так же, как на появление упомянутых панелей - их приходится вручную максимизировать заново.
Как бы это сделать по-человечески?
З.Ы.извиняюсь за кривое объяснение - по-другому не получилось ;(


 
[NIKEL] ©   (2002-03-02 14:09) [1]

Тебе надо создать многооконное приложение, но не хочется захламлять экран большим количеством окошек ? Если так, то создавай формы как обычно, но в каждой форме, за исключением основной, установи BorderStyle=bsNone. Затем на основную форму перетащи панель которая будет управлять заполнением твоих форм данными и полями ввода. Если надо могу дать код такой реализации...


 
beaver ©   (2002-03-02 14:25) [2]

Это тоже интересно и код можно было бы дать ;)
Но вопрос в другом: нужно, чтобы все максимизируемые приложения разворачивались, заполняя весь десктоп, кроме области, ограниченной TaskBar-ом, панелью офиса(прижатой к стенке) и моей программой. Проще говоря, если она справа прижата, то все крестики РАЗВЕРНУТЫХ окошек не под ней, а слева :)))


 
Nikolay ©   (2002-03-02 14:50) [3]

не уверен но можно попробовать ловить запуск программы ( окошка и меняеть его размеры)


 
[NIKEL] ©   (2002-03-02 15:35) [4]

вот код которые обещал дать :

acXxxxx - это действие, которое будет выполняться при нажатии на элемент (пункт меню, кнопка, акселератор и т.д.) ассоциированный с этим действием через свойство Action.
=================

TfrmIMMain
......................
private
(*
используется для заполнения всего экрана
*)
procedure WMSettingChange( var Msg: TMessage);message WM_SETTINGCHANGE;

public
ActiveDetailForm: TForm;//Форма, которая активна в данный момент
procedure SetActiveDetailForm(F: TForm; ParentControl: TWinControl);
end;

var
frmIMMain: TfrmIMMain;

implementation

uses imdata, imSoftL, imSuppl, imEqDet, imDesk, imSpareP, imCateg,
imLocL, imUserL, imEqList, imEqByUsr, imImpBlb, imSftLic, imSupL,
imEqDetR, imRptPrm, imdmRep, imSftLicRepPrm, imSparePR, imSparePPrm,
imSftDetR, imSoftDetRPrmDlg;

{$R *.DFM}
//
function GetWindowsWorkArea: TRect;
begin
SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0);
end;

procedure TfrmIMMain.WMSettingChange( var Msg: TMessage);
var
R: TRect;
begin
if (Msg.WParam=SPI_SETWORKAREA) then
begin
R:=GetWindowsWorkArea;
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;
Msg.Result:=0;
end;

procedure TfrmIMMain.FormCreate(Sender: TObject);
var
R: TRect;
begin
// заполняем весь экран...
R:=GetWindowsWorkArea;
SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
end;

// показываем форму списка Software
procedure TfrmIMMain.acSoftwareListExecute(Sender: TObject);
begin
if (Sender is TAction) then
begin
(Sender as TAction).Checked:=True;
fcbSoftList.Down:=True;
end;
//paWorkArea это панель, которая использется, как управляющая для форм
SetActiveDetailForm(frmIMSoftList, paWorkArea);
end;

// показываем форму "Оборудование"...
procedure TfrmIMMain.acEquipmentDetailsExecute(Sender: TObject);
begin
if (Sender is TAction) then
begin
(Sender as TAction).Checked:=True;
fcbEqDet.Down:=True;
end;
SetActiveDetailForm(frmIMEqDet, paWorkArea);
end;

// устанавливаем активную форму, чтобы выглядело как в MS outlook.......
// ParentControl это TPanel, но это может быть любой оконный элемент управления (который
имеет оконное свойство Handle)
procedure TfrmIMMain.SetActiveDetailForm(F: TForm; ParentControl:
TWinControl);
begin
if ActiveDetailForm<>F then
begin
if Assigned(ActiveDetailForm) then
ActiveDetailForm.Hide;
//следующие две линии делают то, что нам нужно...
F.Parent:=ParentControl;
F.Align:=alClient;
ActiveDetailForm:=F;
F.Show;
end;
end;

procedure TfrmIMMain.FormActivate(Sender: TObject);
begin
//устанавливаем форму по умолчанию при запуске.
if not Assigned(ActiveDetailForm) then
acEquipmentDetailsExecute(acEquipmentDetails);
end;


если его немного доработать, то ты получишь что тебе надо :)


 
beaver ©   (2002-03-03 09:48) [5]

Может, ты мне полный исходник на мыло запостишь, а то я не совсем представляю, как это все выглядит. Или хотя бы скринсейвер ;)


 
beaver ©   (2002-03-03 12:58) [6]

На мой вопрос ответил Soulless на www.rsdn.ru.
Кому интересно - http://www.rsdn.ru/forum/message.asp?mid=32826
Надо привыкать к MSDN...



Страницы: 1 вся ветка

Текущий архив: 2002.05.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-17617
Shadow
2002-04-22 18:57
2002.05.06
Файлы...


1-17541
Kuks
2002-04-24 03:33
2002.05.06
Как выделить создать массив на n указателей?


3-17486
Matr
2002-04-12 13:54
2002.05.06
положение горизонтального бегунка DBGrid


1-17529
DikobraZ
2002-04-23 20:57
2002.05.06
Можно ли расположить надпись поверх memo и ему подобных?


4-17747
Igor_thief
2001-12-20 12:04
2002.05.06
System tray