Главная страница
    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.036 c
4-1114352108
SPeller
2005-04-24 18:15
2005.06.14
Глобальный мышиный хук. Помогите ошибку найти


1-1117214654
Gorger
2005-05-27 21:24
2005.06.14
В поток передаю канвас...


4-1114411459
Mihas
2005-04-25 10:44
2005.06.14
Как прочитать из окна WINWORD Текст документа?


3-1115781609
Lex_!
2005-05-11 07:20
2005.06.14
Можно ли в TThread работать с базой данных


8-1109702013
Romantic
2005-03-01 21:33
2005.06.14
Громадный TImage





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