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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2007, 17:16   #1
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию получить текст из заданной ячейки DbGrid

Здравствуйте, есть ли возможность из DbGrid получить текст ячейки с заданными координатами?(Не выбирая её)
furstenberg вне форума Ответить с цитированием
Старый 05.12.2007, 18:27   #2
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Код:
Table1.RecNo:=3; // строка
caption:=Table1.Fields.Fields[1].Text; //колонка
Alex21 вне форума Ответить с цитированием
Старый 05.12.2007, 18:30   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Я знаю один "корявый" способ...
Есть таблица, которая отображается в ДБГриде. Допустим, через пару Table1 и DataSource1.
Нужно организовать Table2 и DataSourse2, связанные друг с дружкой и эту Table2 подцепить к той же таблице базы, что и Table1.
Дальше вот что:
Код:
...
  private
    { Private declarations }
    procedure AppMess(var Msg: TMsg; var Handled: Boolean);
...
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.ShowHint := True;
Application.OnMessage := AppMess;
end;

procedure TForm1.AppMess(var Msg: TMsg; var Handled: Boolean);
var X, Y: integer;
    mc: TGridCoord;
    s: string;
begin
if Msg.message=WM_MOUSEMOVE then
begin
if Msg.hwnd=DBGrid1.Handle then
begin
x:=LoWord(Msg.lParam);
y:=HiWord(Msg.lParam);
mc:=DBGrid1.MouseCoord(x,y);
if (mc.x>0) and (mc.y>0) then
begin
DataSource2.DataSet.First;
DataSource2.DataSet.MoveBy(mc.y-1);
s:=Table2.FieldByName(DBGrid1.Columns[mc.x-1].FieldName).asString;
if Label1.Caption<>s then
Label1.Caption:=s;
end;
end;
end;
end;
В Label1 увидите текст из ячейки, над которой двигается мышка...
mihali4 вне форума Ответить с цитированием
Старый 07.12.2007, 00:19   #4
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

Спасибо, сделал всё через StringGrid(проще оказалось)
furstenberg вне форума Ответить с цитированием
Старый 21.12.2007, 21:35   #5
Dimoney
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 34
По умолчанию

Привет, гуру.

Не стал создавать новую тему, спрошу здесь: можно ли по условию "раскрасить" отдельные ячейки в определенном столбце DBGrid? Напр. столбец "Ответ" (№ 5), значение "Верно" подсветить зеленым, "Не верно" - красным.
Dimoney вне форума Ответить с цитированием
Старый 21.12.2007, 22:04   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Dimoney Посмотреть сообщение
Привет, гуру.

Не стал создавать новую тему, спрошу здесь: можно ли по условию "раскрасить" отдельные ячейки в определенном столбце DBGrid? Напр. столбец "Ответ" (№ 5), значение "Верно" подсветить зеленым, "Не верно" - красным.
http://www.programmersforum.ru/showthread.php?t=8416
http://www.programmersforum.ru/showthread.php?t=8170
mihali4 вне форума Ответить с цитированием
Старый 21.12.2007, 22:39   #7
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Dimoney Посмотреть сообщение
можно ли по условию "раскрасить" отдельные ячейки в определенном столбце DBGrid? Напр. столбец "Ответ" (№ 5), значение "Верно" подсветить зеленым, "Не верно" - красным.
Вот, нашел такое описание:
Необходимо обработать событие "OnDrawCellData". Например для того, чтобы пометить выбранное окошко красным фоном, необходимо сделать следующее:
Код:
procedure TForm1.DBGridDrawDataCell(Sender:TObject; const Rect:TRect;
  Field:TField; State:TGridDrawState);
begin
  if gdFocused in State then
    with (Sender as TDBGrid).Canvas do
      begin
        Brush.Color := clRed;
        FillRect(Rect);
        TextOut(Rect.Left, Rect.Top, Field.AsString);
      end;
end;
Чтобы убедиться, что выбран нужный столбец, проверить параметр Field
Jeni вне форума Ответить с цитированием
Старый 21.12.2007, 23:09   #8
Dimoney
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 34
По умолчанию

Вот мой кусок:
Код:
procedure TStat.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with StringGrid1.Canvas do 
    if StringGrid1.Cells[ACol,ARow]='Не верно' then
    begin
      Brush.Color:=clRed;
      FillRect(Rect);
    end
    else if StringGrid1.Cells[ACol,ARow]='Верно' then
      begin
        Brush.Color:=clGreen; 
        FillRect(Rect);
    end;
    WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Column.Field.AsString,Column.Alignment);

Прописал WriteText.
Код:
  private
    procedure WriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer; const Text: string; Alignment: TAlignment);
Пишет:
Код:
[Error] Unit2.pas(28): Unsatisfied forward or external declaration: 'TStat.WriteText'
Что ей не так? (Простите чайника)

Последний раз редактировалось Dimoney; 21.12.2007 в 23:14.
Dimoney вне форума Ответить с цитированием
Старый 21.12.2007, 23:13   #9
Dimoney
Пользователь
 
Регистрация: 14.12.2007
Сообщений: 34
По умолчанию

А по условию? Только ячейки 5-го столбца...Верно/Не верно. Очень надо...

ТО mihali4: Извиняюсь, но надо срочно, поэтому писал сразу в два места...

//а что перед Михалычем извиняться?) Срочно? Это вам во фриланс, а так штраф.
(Отвечаю шепотом на ваш вопрос: штрафы выражабтся в баллах, при достаточном кол-ве вы получаете бан, и зайти на форум не сможете. Только тс-с-с )
zetrix

Последний раз редактировалось zetrix; 25.12.2007 в 21:06.
Dimoney вне форума Ответить с цитированием
Старый 21.12.2007, 23:44   #10
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Dimoney Посмотреть сообщение
А по условию? Только ячейки 5-го столбца...Верно/Не верно. Очень надо...
Можно использовать сравнение if Field.FieldNo = ... then ....
Только учти, что вообще-то, столбцы в DBGrid не обязательно соответствуют по номерам полям в базе данных. Я уж не говорю о том, что в DBGrid можно перемещать столбцы во время работы программы.
Так что лучше ориентироваться на имя поля БД:
if Field.FieldName = ... then ...

Проверить само значение поля можно так:
if Field.AsString = 'Верно' then <Сделать зеленым> else <Сделать красным>

Последний раз редактировалось Jeni; 21.12.2007 в 23:49.
Jeni вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фокус на заданной строке в DBGrid Zver БД в Delphi 6 08.11.2014 12:51
Как получить текст из примечания? Людмилка Microsoft Office Excel 2 30.07.2008 08:36
Как получить доступ к ячейке DBGrid RatMir БД в Delphi 1 16.06.2008 22:35
Как разделить число и текст в одной ячейки на две ячейки. neboskreb Microsoft Office Excel 2 15.04.2008 19:39
Ячейки в DBGrid Eofol Компоненты Delphi 1 19.01.2008 13:41