Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2008, 09:43   #1
s.mag
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 14
По умолчанию Popup+dbGrid

Господа, прошу прощения за поднятие тойже темы, но у меня возник вопрос как зделать так, чтобы по нажатию клавиши "Enter" меню вылазило в выдиленой строке dbGrid-а. Как запихнуть Popup в dbGrid я догадался, но меню появляется в верхнем левом углу.
s.mag вне форума Ответить с цитированием
Старый 13.05.2008, 10:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как ты меню вызываеш?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 12:09   #3
s.mag
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 14
По умолчанию

Вот таким вот макаром:

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var x,y:integer;
begin
if key=13 then PopupMenu1.Popup(DBGrid1.ClientOrig in.X,DBGrid1.ClientOrigin.Y);
end;
s.mag вне форума Ответить с цитированием
Старый 13.05.2008, 13:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй так:
Код:
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var x,y:integer;var r:TRect;
begin
r:=DBGrid2.Selection;
if key=13 then PopupMenu1.Popup(r.left,r.top); end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 13:52   #5
s.mag
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 14
По умолчанию

неа не помогло, а вернее даже не заработало
s.mag вне форума Ответить с цитированием
Старый 13.05.2008, 14:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да эт я чет не оттуда...
Вот смотри:
Код:
var              t:Tpoint; 
...........

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if gdSelected in state  then  begin
   t:=rect.TopLeft;
   t.X:=t.X+TDBGrid(Sender).Left;
   t.y:=t.y+TDBGrid(Sender).Top;
   end;
end;
.............


procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin
t:=ClientToScreen(t);
   PopupMenu1.Popup(t.X,t.Y);
end;
Примерно так.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 16:16   #7
s.mag
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 14
По умолчанию

спасибо, получилось. НО если несколько раз нажать на одной и тойже записи, то менюшка кудато убегает, может с этим подскажешь как бороться.
s.mag вне форума Ответить с цитированием
Старый 13.05.2008, 16:48   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

как-то так для ячейки [2,2] можно. Правда немного через одно место
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 r: TRect;
begin
  r := TStringGrid(DBGrid1).CellRect(2,2);
    PopupMenu1.Popup(DBGrid1.ClientOrigin.X+r.Left,DBGrid1.ClientOrigin.Y+r.Top);
end;
pu4koff вне форума Ответить с цитированием
Старый 15.05.2008, 13:32   #9
s.mag
Пользователь
 
Регистрация: 06.05.2008
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да эт я чет не оттуда...
Вот смотри:
Код:
var              t:Tpoint; 
...........

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if gdSelected in state  then  begin
   t:=rect.TopLeft;
   t.X:=t.X+TDBGrid(Sender).Left;
   t.y:=t.y+TDBGrid(Sender).Top;
   end;
end;
.............


procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin
t:=ClientToScreen(t);
   PopupMenu1.Popup(t.X,t.Y);
end;
Примерно так.
после долггого ковыряния вашего кода, нашел оптимальный вариант, вот как он выглядит(может кому понадобится).

var t:Tpoint;
...........................
procedure TForm1.DBGrid1DrawColumnCell(Sender : TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if gdselected in State then begin
t:=Rect.TopLeft;
t.X:=t.X+TDBGrid(Sender).Left;
t.Y:=t.Y+TDBGrid(Sender).Top;
t:=ClientToScreen(t);
end;

end;

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then
PopupMenu1.Popup(t.X,t.Y);
end;
s.mag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Popup menu в таблице Access crazybabushka БД в Delphi 3 09.08.2008 12:09
Impact PopUp axeli Софт 1 28.07.2008 12:02
popup в dbgrid drakhar БД в Delphi 7 13.02.2008 08:20
Popup menu Mitron Компоненты Delphi 1 02.02.2008 14:26