Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизОбъединить 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c