Форум: "Основная";
Текущий архив: 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