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

Вниз

Объединить Grid & PopupMenu в одном компаненте   Найти похожие ветки 

 
Layner ©   (2005-05-29 22:41) [0]

Вопрос 2, первый почему то закрыли. Возможно ли сделать компанент на основе грида, где уже был бы "вмонтирован" PopupMenu, и при добавлении колонок в гриде, в PopupMenu было столько же итемов, сколько колонок у грида.
Зачем: на этапе разработки очень много приходится делать действий, что бы сделать грид какой тебе надо, написать обработчик на PopupMenu в каждый итем, где выполняется процедура по опр. столбцу грида. Хотелось бы сделать свой компанент, и его потом использовать, для быстроты разработки приложений.


 
KilkennyCat ©   (2005-05-29 23:30) [1]

Возможно.


 
GuAV ©   (2005-05-30 00:12) [2]

Зарегить, кинуть на форму, назначить нужному гриду.

unit SuperCoolPopupMenu;

interface

uses
 SysUtils, Classes, Menus, Grids, Dialogs;

type
 TSuperCoolPopupMenuItem = class(TMenuItem)
 private
   FRow: Integer;
 public
   property Row: Integer read FRow;
   procedure Click; override;
 end;

 TSuperCoolPopupMenu = class(TPopupMenu)
 private
   procedure MenuItemClick(Sender: TObject);
 protected
   procedure DoPopup(Sender: TObject); override;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Samples", [TSuperCoolPopupMenu]);
end;

{ TSuperCoolPopupMenu }

procedure TSuperCoolPopupMenu.DoPopup(Sender: TObject);
var I: Integer; S: TStrings; Item: TSuperCoolPopupMenuItem;
begin
 with (PopupComponent as TStringGrid) do
   with ScreenToClient(PopupPoint) do
     S := Cols[MouseCoord(X, Y).X];
 Items.Clear;
 for I := 0 to S.Count - 1 do
 begin
   Item := TSuperCoolPopupMenuItem.Create(Self);
   Item.OnClick := MenuItemClick;
   Item.FRow := I;
   Item.Caption := S[I];
   Items.Add(Item);
 end;
 inherited;
end;

procedure TSuperCoolPopupMenu.MenuItemClick(Sender: TObject);
begin
end;

procedure TSuperCoolPopupMenuItem.Click;
begin
 ShowMessageFmt("Click at %d", [FRow]);
 inherited;
end;

end.


 
Defunct ©   (2005-05-30 04:06) [3]

у StringGrid есть свойство PopupMenu...


 
Layner ©   (2005-05-30 08:19) [4]

GuAV ©   (30.05.05 00:12)
Вау, вообще супер что мне нужно! Благодарю, огромное спасибо. Сейчас перепишу все под свой DBGrid!


 
Layner ©   (2005-05-30 09:35) [5]

Пока все на StringGrid тренируюсь,

unit SuperCoolPopupMenu;

interface

uses
SysUtils, Classes, Menus, Grids, Dialogs;

type
TSuperCoolPopupMenuItem = class(TMenuItem)
private
  FRow: Integer;
  FChecked_: Boolean;
public
  property Row: Integer read FRow;
  property Checked_: Boolean write FChecked_;   //Показывает, вкл. или выкл Checked
  procedure Click; override;
end;

TSuperCoolPopupMenu = class(TPopupMenu)
private
  procedure MenuItemClick(Sender: TObject);
protected
  procedure DoPopup(Sender: TObject); override;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Samples", [TSuperCoolPopupMenu]);
end;

{ TSuperCoolPopupMenu }

procedure TSuperCoolPopupMenu.DoPopup(Sender: TObject);
var
I, a : Integer;
Item : TSuperCoolPopupMenuItem;
begin
a:=(PopupComponent as TStringGrid).ColCount;

Items.Clear;
for I := 0 to a - 1 do
begin
  Item := TSuperCoolPopupMenuItem.Create(Self);
  Item.OnClick := MenuItemClick;
  Item.AutoCheck:=True;
  Item.Checked:=True;
  Item.FChecked_:=True;
  Item.FRow := I;
  Item.Caption := (PopupComponent as TStringGrid).Name+"/"+(PopupComponent as TStringGrid).Cells[i, 0];
  Items.Add(Item);
end;
inherited;

end;

procedure TSuperCoolPopupMenu.MenuItemClick(Sender: TObject);
begin

end;

procedure TSuperCoolPopupMenuItem.Click;
begin
 If FChecked_=True
  then
   begin
    FChecked_:=False;
    ShowMessageFmt("Выключили Checked %d", [FRow]);
   end
  else
   begin
    FChecked_:=True;
    ShowMessageFmt("Включили Checked %d", [FRow]);
   end;
inherited;
end;

end.


Код дорабатываю под свои нужды, хочу отработать Checked у Item, по умолчанию он включен, хотелось бы его по клику выключать, для это ввел переменную FChecked_: Boolean;, чтобы ее отслеживать, да вот что то не меняется она, в TSuperCoolPopupMenuItem.Click; подскажите плз, как можно обработать Checked?


 
KilkennyCat ©   (2005-05-30 09:52) [6]

ужасть.

FChecked_ := not FChecked_;
If FChecked_ then ShowMessageFmt("Включили Checked %d", [FRow]) else ShowMessageFmt("Выключили Checked %d", [FRow]);


 
Layner ©   (2005-05-30 10:02) [7]

KilkennyCat ©   (30.05.05 09:52)
:) Сам знаю, а код тот же самый, ShowMessageFmt выдает только "Выключили.."



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1116698692
mySh
2005-05-21 22:04
2005.06.14
Не грузятся картинки в PHP


1-1117188948
sapsi
2005-05-27 14:15
2005.06.14
архивация текстового файла программно


14-1116589520
Piter
2005-05-20 15:45
2005.06.14
Глюк со SmartFTP


4-1114333737
Nafania
2005-04-24 13:08
2005.06.14
Список программ, которые запускались с компьютера


9-1111060381
Серый
2005-03-17 14:53
2005.06.14
Где найти путные md2 модели