Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.06.2012, 17:38
Аватар для Sprinter_One
Sprinter_One Sprinter_One вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 5
Репутация: 10
Печаль DBGrid - нужна помощь

Всем доброго времени суток! Помогите новичку! Ситуация такая: Создал БД в phpmyadmin, создал проект в dephi 7. Подцепился к базе через компоненты: "ADOConnection, ADOQuery, DataSourse и DBGrid". Всё работает, таблица отображается! НУЖНО СДЕЛАТЬ ТАК, ЧТОБЫ ПРИ ДВОЙНОМ ЩЕЛЧКЕ НА ОПРЕДЕЛЁННУЮ ЯЧЕЙКУ ТАБЛИЦЫ DBGrid, ВЫВОДИЛАСЬ ДРУГАЯ ФОРМА!
Ответить с цитированием
  #2  
Старый 01.06.2012, 18:03
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Цитата:
Сообщение от Sprinter_One
Всем доброго времени суток! Помогите новичку! Ситуация такая: Создал БД в phpmyadmin, создал проект в dephi 7. Подцепился к базе через компоненты: "ADOConnection, ADOQuery, DataSourse и DBGrid". Всё работает, таблица отображается! НУЖНО СДЕЛАТЬ ТАК, ЧТОБЫ ПРИ ДВОЙНОМ ЩЕЛЧКЕ НА ОПРЕДЕЛЁННУЮ ЯЧЕЙКУ ТАБЛИЦЫ DBGrid, ВЫВОДИЛАСЬ ДРУГАЯ ФОРМА!
эээ... Form2.Show?

Вы хоть конкретизируйте, что за форма (если это важно), как она должна выводится, по каким параметрам выбирается ОПРЕДЕЛЕННАЯ ЯЧЕЙКА (простите, не удержался), и тому подобное.
Ответить с цитированием
  #3  
Старый 01.06.2012, 18:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Обработайте событие OnCellClick. При щелчке по ячеке, автоматом будет установлен указатель в БД на запись, следовательно запись текущую в источнике вы получите, ну а уж определится с каким полем этой записи вы имеете дело поможет параметр события Column.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Sprinter_One (01.06.2012)
  #4  
Старый 01.06.2012, 19:08
Аватар для Sprinter_One
Sprinter_One Sprinter_One вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

просто есть две формы, в первой таблица dbgrid....нужно чтобы при нажатии на определённую ячейку таблицы по двойному щелчку, на экран вылазила вторая форма!
Ответить с цитированием
  #5  
Старый 01.06.2012, 19:11
Аватар для Sprinter_One
Sprinter_One Sprinter_One вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Обработайте событие OnCellClick. При щелчке по ячеке, автоматом будет установлен указатель в БД на запись, следовательно запись текущую в источнике вы получите, ну а уж определится с каким полем этой записи вы имеете дело поможет параметр события Column.
OnCellClick - вариант, но там просто при нажатии! а надо по двойному щелчку! я так понимаю, что для этого подходит событие OnDblClick. но я сам код не могу реализовать!знаний не хватает у меня получается так, что при нажатии на любую ячейку, выскакивает вторая форма! а нужно с определённой ячейкой! Да, кстати, если несложно, то напишите пожалуйста код.

Последний раз редактировалось Sprinter_One, 01.06.2012 в 19:13.
Ответить с цитированием
  #6  
Старый 01.06.2012, 20:40
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Через даблклик немножко иначе надо:
Код:
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
 if DBGrid1.SelectedField.FieldName = 'caption'
 then ShowMessage('Жмякнули дважды в поле caption');
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 01.06.2012, 20:54
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

в OnDblClick объект Column не передаётся, а тебе нужно его свойства проверять. В таком случае нужно использовать оба события. Т. к. OnClick просходит раньше, в нём нужно проверить поле на соответствие, а в OnDblClick вызывать форму.

Можно в случае крайней необходимости row и col проверять, но так как они protection надо писать свой класс
http://delphiworld.narod.ru/base/dbgrid_col_row2.html

ps: Cтрадалецъ, если по полю кликнули, это не значит что оно во всех случаях уже selected
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 01.06.2012 в 20:58.
Ответить с цитированием
Этот пользователь сказал Спасибо Viajero за это полезное сообщение:
Sprinter_One (01.06.2012)
  #8  
Старый 01.06.2012, 21:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
ps: Cтрадалецъ, если по полю кликнули, это не значит что оно во всех случаях уже selected
Покажи на примере.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 01.06.2012, 21:18
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от Страдалецъ
Покажи на примере.
Не понял что именно. Тут же от конкретной задачи зависит. Например dgRowSelect может быть установлен. А параметр Column события OnCellClick всегда точно определит тот Field который нужен.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
Этот пользователь сказал Спасибо Viajero за это полезное сообщение:
Sprinter_One (01.06.2012)
  #10  
Старый 01.06.2012, 21:19
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Мне кажется что в данном случаем какая-то конкретная ячейка грида по которой кликнули не имеет значения. Автору, скорее всего, нужно просто при OnDblClick открыть эту же запись в другой форме для редактирования и все
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
Sprinter_One (01.06.2012)
  #11  
Старый 01.06.2012, 21:24
Аватар для Sprinter_One
Sprinter_One Sprinter_One вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 5
Репутация: 10
Радость Всем спасибо!!!

Всем спасибо!!!
Решил проблему так:
1) Объявил новый класс:
Код:
THackGrid = class(TDBGrid)
public
property Col;
property Row;
end;
2) В обработчике событий OnDblClick компонента DBGrid записал следующее:
Код:
procedure TForm1.dbgrd1DblClick(Sender: TObject);
begin
if (THackGrid(dbgrd1).Col=2) and (THackGrid(dbgrd1).Row=1) then
begin
Form2.show;
end;
end;

ВОТ КОД, НАДЕЮСЬ КОМУ-НИБУДЬ ПОМОЖЕТ:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
dbgrd1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure dbgrd1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

THackGrid = class(TDBGrid)
public
property Col;
property Row;
end;

var
Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.dbgrd1DblClick(Sender: TObject);
begin
if (THackGrid(dbgrd1).Col=2) and (THackGrid(dbgrd1).Row=1) then
begin
Form2.show;
end;
end;
end.

// Form2.show; - не забудте создать вторую форму

Bargest: не забываем оформлять код тегами!

Последний раз редактировалось Bargest, 01.06.2012 в 21:55.
Ответить с цитированием
  #12  
Старый 01.06.2012, 21:25
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от Yurk@
Автору, скорее всего, нужно просто при OnDblClick открыть эту же запись

Возможно не любую запись, потому что первый вариант, что предлагал Страдалецъ для ТС не подошёл.
http://www.delphisources.ru/forum/sh...71&postcount=3
Впрочем пусть ТС сначала пояснит, чтоже ему конкретно нужно.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #13  
Старый 01.06.2012, 21:35
Аватар для Sprinter_One
Sprinter_One Sprinter_One вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 5
Репутация: 10
Радость

Да кстати, вот ещё полезная ссылка http://delphicode.org/components/dbg...ct_dblclck.htm
Тему можно считать закрытой!

Последний раз редактировалось Sprinter_One, 01.06.2012 в 21:50.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025