Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
6-1111948462
livs
2005-03-27 22:34
2005.06.14
Срочно, горю


1-1117099653
pavel_guzhanov
2005-05-26 13:27
2005.06.14
Работа с PopupMenu


1-1116926464
Pavelkq
2005-05-24 13:21
2005.06.14
Передача имени массива в качестве параметра


3-1115277422
Dels
2005-05-05 11:17
2005.06.14
Компонент DBMemo в Windows XP


1-1117185097
electric
2005-05-27 13:11
2005.06.14
Прокрутка в TWebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский