Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Вниз

Панель задач для Delphi   Найти похожие ветки 

 
Егоров А.Н.   (2007-07-30 08:20) [0]

Можно ли сделать Панель Задач для формы Delphi? Если да, то как? Или может быть есть готовые компоненты?


 
Kolan ©   (2007-07-30 08:30) [1]

> Панель Задач

Поясните что вы под этим понимаете.


 
Егоров А.Н.   (2007-07-30 10:15) [2]

Есть MDI форма и есть MDIChild форма, которая содержит TreeView1, где находится древовидное меню. При выборе узлов TreeView1 открываются MDIChild формы (возможно во множественных экземплярах). Нужно на главной MDI форме иметь свою (для данного приложения) Панель Задач, подобную Windows, для того чтобы менять активные MDIChild формы и управлять ими.


 
ЮЮ ©   (2007-07-30 10:25) [3]

>для того чтобы менять активные MDIChild формы и управлять ими

Если у MDI формы установить свойство WindowMenu, то полкчишь список окон в пункте меню. Может этого будет достаточно? А то на панели задач все равно кроме значков чаще всего ничего не видно :)


 
Егоров А.Н.   (2007-07-30 10:45) [4]

Ответ ЮЮ. Да, наверное это выход. Сейчас пободаюсь.


 
Sdubaruhnul   (2007-07-30 10:49) [5]

Панель задач - это TToolBar.


 
Егоров А.Н.   (2007-07-30 12:01) [6]

TToolBar - это панель инструментов, а не панель задач. Но вопрос не в этом.

Если копать глубже свойство WindowMenu, то как, при открытии MDIChild формы, ее Caption прописавается в Menu MDI формы. Я хочу немного изменить этот процесс. Т.К. при множественных экземплярах эдной и той же формы в МЕНЮ выдаются одинаковые записи названия этих форм. Хотелось бы иметь <Название формы (индекс экземпляра)>.


 
Плохиш ©   (2007-07-30 12:06) [7]


> Егоров А.Н.   (30.07.07 12:01) [6]
> TToolBar - это панель инструментов, а не панель задач.

Можно расшифровать отличия "панель инструментов" от "панель задач" с точки зрения программиста?

> Т.К. при множественных экземплярах эдной и той же формы
> в МЕНЮ выдаются одинаковые записи названия этих форм. Хотелось
> бы иметь <Название формы (индекс экземпляра)>.

Так и присваивай им заголовок <Название формы (индекс экземпляра)> при создании.


 
Егоров А.Н.   (2007-07-30 13:10) [8]

Так и присваивай им заголовок <Название формы (индекс экземпляра)> при создании.
Виноват. Торможу.

Но в действительности, Список Открытых Окон в Меню - это конечно просто и без лишних затей. Но не очень наглядно и,  при большом количестве открых окон, для перехода между ними приходится много раз тыкать мышью (сначала в Меню, потом в Пункт Окна).
В этом смысле Панель Задач, наподобии Windows более удобна. Самое главное , что при открытии формы создается иконка, которая имеет отратную связь с формой. Можно конечно иметь ToolBar и программно при открытии формы создавать в нем кнопки (это у меня еже есть).

// Создаем кнопку
      B:=TToolButton.Create(Application);
// Присваиваем ей родителя
      B.Parent:=Form_Main.ToolBar2;
      B.Caption:=RzTreeView1.Selected.Text;
      B.AutoSize:=True;
// Задаем, чтобы они переключались на подобии RadioButton
      B.Style:=tbsCheck;
      B.Grouped:=True;
// Нажимаем вновь созданную кнопку
      B.Down:=True;
// Создаем экземпляр формы (например, Form_MoveTovar) и запускаем ее
      Form_MoveTovar := TForm_MoveTovar.Create(Application);
      Form_MoveTovar.show;

Но возникает вопрос - как обеспечить этим кнопкам отбратную связь с формами?

И еще у меня почему-то при создании новой кнопки по вышеприведенному коду она добавляется не в конец списка кнопок, а в его начало ???


 
ancot   (2007-07-31 10:09) [9]

писал такой control в виде панели с TSpeedButton. переключает MDIChildы и кнопки переключаются при переходе по окнам, на кнопках отображаются иконки заголовки и  иконки MDIForm. Нада  пиши в почту


 
Егоров А.Н.   (2007-07-31 16:08) [10]

ancot
Спасибо, уже почти добил свое. Единственное, не могу добиться, чтобы вновь создаваемые кнопки становились в конец списка кнопок, а не в начало.
Если знаешь как - подскажи.


 
ancot   (2007-07-31 16:53) [11]

не парься. готовое простое решение:

unit WndPanel;

interface

uses
 Windows ,SysUtils, Classes, Forms, Controls, Graphics, Dialogs, ExtCtrls,
 Types, Menus, Messages;

type
 TWndPanel = class(TCustomControl)
 private
   CanDraw: Boolean;
   FAutoHide: Boolean;
   FChildCount: Integer;
   FActiveForm: Integer;
   FIcon: TIcon;
   FBmp: TBitmap;
   FImage: TImageList;
   FImageIndex: Integer;
   function BtnRect(Index: Integer): TRect;
   function GetChild(Index: Integer): TForm;
   procedure SetAutoHide(Value: Boolean);
   procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
 protected
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer); override;
 public
   procedure FormChange(Sender: TObject);
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Paint; override;
   procedure Loaded; override;
 published
   property Visible;
   property Color;
   property Image: TImageList read FImage write FImage;
   property ImageIndex: Integer read FImageIndex write FImageIndex;
   property AutoHide: Boolean read FAutoHide write SetAutoHide;
   property PopupMenu;
 end;

procedure Register;

implementation

{$R ICO.RES}

uses Math;

const WndH = 22;

constructor TWndPanel.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FBmp := TBitmap.Create;
 Align := alBottom;
 Color := clBtnFace;
 FIcon := TIcon.Create;
 FIcon.Transparent := true;
 FIcon.Width := 16;
 FIcon.Height := 16;
end;

destructor TWndPanel.Destroy;
begin
 FBmp.Free;
 FIcon.Free;
 inherited Destroy;
end;

procedure TWndPanel.Paint;
 var r, r1: TRect;
     n, i: Integer;
     Cap: String;
     Ico: TIcon;
     Frm: TComponent;
begin
 with Canvas, Application do
 begin
   if (csDesigning in Componentstate) or (FChildCount = 0) or (not CanDraw) then Exit;
   n:= 0;
   for i := 0 to ComponentCount - 1 do
   begin
     Frm := Components[i];
     if (Frm is TForm) and (TForm(Frm).FormStyle = fsMDIChild) then
     begin
       Frm := Components[i] as TForm;
       r1 := BtnRect(n);
       r := r1;
       Brush.Color := Color;
       FillRect(R);
       if Frm = MainForm.ActiveMDIChild then
       begin
         Font.Style := [fsBold];
         Frame3D(Canvas, R, cl3DDkShadow, clWhite, 1);
         FActiveForm := n;
         R.Right := R.Left + 16;
       end else
       begin
         Font.Style := [];
         Frame3D(Canvas, R, clWhite, cl3DDkShadow, 1);
         R.Right := R.Left + 16;
         OffsetRect(R, -1, -1);
       end;
       Brush.Color := clBtnFace;
       Ico := TForm(Frm).Icon;
       if Ico.Empty then
       begin
         if Image <> nil then
           Image.GetIcon(ImageIndex, FIcon);
       end else
       begin
         if Assigned(Ico) then FIcon.Assign(Ico);
       end;
       Draw(R.Left + 2, R.Top + 2, FIcon);
       r.Left := r.Right + 4;
       r.Right := r1.Right;
       Inc(R.Top, 3);
       Dec(R.Right, 2);
       Cap :=  TForm(Frm).Caption;
       DrawText(Canvas.Handle, PChar(Cap), Length(Cap), R, DT_LEFT or DT_END_ELLIPSIS);
       Inc(n);
     end;
   end;
 end;
end;

procedure TWndPanel.Loaded;
begin
 inherited Loaded;
 Height := WndH;
 if not (csDesigning in Componentstate) then
   Screen.OnActiveFormChange :=  FormChange;
end;

procedure TWndPanel.SetAutoHide(Value: Boolean);
begin
 FAutoHide := Value;
 if FAutoHide then Height := 6
              else Height := WndH;
 CanDraw := not Value;
end;

function TWndPanel.GetChild(Index: Integer): TForm;
 var n, i: Integer;
begin
 n := 0;
 Result := nil;
 for i := 0 to Application.ComponentCount - 1 do
   if Application.Components[i] is TForm then
     if (Application.Components[i] as TForm).FormStyle = fsMDIChild
      then begin
             if n = Index then
             begin
               Result := TForm(Application.Components[i]);
               Exit;
             end;
             Inc(n);
           end;
end;

function TWndPanel.BtnRect(Index: Integer): TRect;
 var BtnWidth: Integer;
     i: Integer;
 const DefBtnWidth = 170;

begin
 i := Width div FChildCount;
 if i > DefBtnWidth then BtnWidth := DefBtnWidth
                    else BtnWidth := Width div FChildCount;

 Result := Rect(Index * BtnWidth, 1, Index * BtnWidth + BtnWidth - 3, Height - 1)
end;

procedure TWndPanel.MouseDown(Button: TMouseButton; Shift: TShiftState;
 X, Y: Integer);
 var i: Integer;
     R: TRect;
begin
 inherited;
 if not (ssLeft in Shift) then Exit;
 for i := 0 to Application.MainForm.MDIChildCount - 1 do
 begin
   R := BtnRect(i);
   if (X >= R.Left) and (X <= R.Right)
     and (Y >= R.Top) and (Y <= R.Bottom) then GetChild(i).Show;
 end;
end;

procedure TWndPanel.FormChange(Sender: TObject);
begin
 with Application do
 begin
   if (Terminated or not Visible) or (MainForm = nil) then Exit;
   FChildCount := MainForm.MDIChildCount;
 end;
 Invalidate;
end;

procedure TWndPanel.CMMouseEnter (var Message: TMessage);
begin
 inherited;
 if csDesigning in ComponentState then Exit;
 if (GetActiveWindow <> 0) then
   if FAutoHide then
   begin
     CanDraw := true;
     Height := WndH;
   end;
end;

procedure TWndPanel.CMMouseLeave (var Message: TMessage);
begin
 inherited;
 if csDesigning in componentstate then Exit;
   if FAutoHide then
   begin
     CanDraw := False;
     Height := 6;
     Repaint;
   end;
end;

procedure Register;
begin
 RegisterComponents("1C Controls", [TWndPanel]);
end;

end.


 
Егоров А.Н.   (2007-08-01 08:22) [12]

ancot
Сэнкью большое.
Я в Delphi пока еще на уровне третьего класса средней школы. Поэтому извени за может быть глупый вопрос. Но как это правильно использовать. Я вставил в свой проект твой Unit и он выдал сообщение: нет файла ICO.RES. Если я правильно понимаю, то это есть КОМПОНЕНТ  Delphi, но где тогда его записать, как обозвать и что такое ICO.RES ?
Извени за делитанство, пока еще нахожусь в процессе совершенствования.



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

Форум: "Основная";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.058 c
15-1189518582
istok
2007-09-11 17:49
2007.10.14
Блокать вебсайты..


15-1189675794
Ega23
2007-09-13 13:29
2007.10.14
Как иконку компоненту добавить?


2-1190208082
ANTPro
2007-09-19 17:21
2007.10.14
Как обновить окно...


1-1185952348
Dmitry_177
2007-08-01 11:12
2007.10.14
Как сделать чтобы Edit имелл фокус при запуске


2-1190280036
Kolan
2007-09-20 13:20
2007.10.14
Как поймат событие после изменения Text у DBLookUpComboBox?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский