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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 14:39   #1
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию Проблема с шириной столбцов в StringGrid

Здасти еще разок.
Объясните мне пожалуйста, что за зверь этот СтрингГрид, никак не дрессируется?

Например:
Почему при ширине 180, ширине столбика 30 и количестве столбиков 6, в последнем стобике не достает чуть ли не половины? Есть версия, что из-за того, что отключен ScrollBar.

И еще:
StringGrid лежит в GroupBox. И вот этот код работает как-то криво:
Код:
Xm := Mouse.CursorPos.X - Main.Left - GroupBox1.Left;
Ym := Mouse.CursorPos.Y - Main.Top - GroupBox1.Top - 25;
if (Xm > StringGrid1.Left) and (Xm < StringGrid1.Left + StringGrid1.Width) and
  (Ym > StringGrid1.Top) and (Ym < StringGrid1.Top + StringGrid1.Height) then
    begin
    (Sender as TButton).Left := round(Xm / StringGrid1.ColCount) * StringGrid1.ColCount + StringGrid1.Left;
    (Sender as TButton).Top := StringGrid1.Top;
    //showmessage(inttostr(Xm)+'; '+inttostr(Ym));
    end;
По идее кнопочка должна становиться ровно в ту ячейку, где находился курсор, на момент исполнения кода, но становится значительно правее.

Просвятите пожалуйста ^_^
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 15:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

StringGrid1.CellRect(Колонка, стрка) Даст координаты ячейки, так что тебе не придется ничего выдумывать.
Цитата:
Есть версия, что из-за того, что отключен ScrollBar.
Логичная версия. Проверь ее - отключи скроллбары
Цитата:
где находился курсор
Какой? Мышиный? Ячейка выделена, или просто мышка на нее наведена?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2010, 15:39   #3
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Цитата:
StringGrid1.CellRect(Колонка, стрка) Даст координаты ячейки, так что тебе не придется ничего выдумывать.
За это отдельное спасибо) Тут координаты верхнего левого угла?

Цитата:
Логичная версия. Проверь ее - отключи скроллбары
В том-то и дело. Я думаю, что в ширину 180 включается скроллбар, а посколько он у меня выключен, реальная ширина не 180, поэтому у последнего столбика и не достает ширины...

Цитата:
Какой? Мышиный? Ячейка выделена, или просто мышка на нее наведена?
Мышиный. Событие срабатывает, когда мы перетаскиваем кнопку на ячейку и отпускаем. Вот и отслеживаю, где находился курсор. Знаю что извращенка, но что ж поделать)))
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 15:48   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Кто такой Main.Left ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.11.2010, 15:51   #5
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Main - название формы, Left - это left ))))
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 16:01   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Тебе нужно первести мышиные координаты в колонки StringGrid'a. Верно? Тогда возможно (могу ошибаться) все дело в неверном пересчете координат мышки. Проверь как они обсчитываются. И еще один вариант - ты учитываешь первую, заголовочную колонку?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.11.2010, 16:04   #7
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Utkin, у меня нет заголовочных колонок. Считаю колонки с нуля. СтрингГрид у меня фактически выступает просто как сеточка под кнопки, чтобы их можно было красиво и ровно выстроить после перемещения.
И да, скорее всего не правильно считаю...
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 16:08   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Скорее всего ты неверно представляешь, что находится в Mouse.CursorPos.Х
Поэксперементируй с его значениями при наведении его на твой StringGrid. То есть, представь сначала какая там должна быть координата и получи фактическую.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.11.2010, 16:14   #9
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Представляю, эксперементировала))))
Кстати теперь всё работает как нужно

Безо всяких модификаций в Mouse.CursorPos.Х кладется позиция курсора по X на экране. Независимо какие там формы у меня и еще что.

А можно у СтрингГрида запретить выделение ячейки? А то как-то некрасиво смотрится эта синяя ячейка.

Последний раз редактировалось Риндера; 09.11.2010 в 16:48.
Риндера вне форума Ответить с цитированием
Старый 09.11.2010, 16:57   #10
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
StringGrid без выделенной ячейки
Код:
procedure TForm.sgrDrawCells(Sender: TObject; Col, Row: Longint; Rect: TRect;
  State: TGridDrawState);
var
  ACol: longint absolute Col;
  ARow: longint absolute Row;
  Buf: array[byte] of char;
begin
  if State = gdFixed then
    Exit;

  with sgrGrid do
  begin
    Canvas.Font := Font;
    Canvas.Font.Color := clWindowText;
    Canvas.Brush.Color := clWindow;

    Canvas.FillRect(Rect);
    StrPCopy(Buf, Cells[ACol, ARow]);
    DrawText(Canvas.Handle, Buf, -1, Rect,
      DT_SINGLELINE or DT_VCENTER or DT_NOCLIP or DT_LEFT);
  end;
end;
from delphiworld
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк и столбцов в StringGrid Sarumjan Общие вопросы C/C++ 2 17.10.2010 20:38
Закрашивание столбцов в Stringgrid ertar Общие вопросы Delphi 3 19.02.2009 00:31
StringGrid - удаление строк и столбцов ReM Общие вопросы Delphi 4 22.12.2008 19:17
Вывод столбцов StringGrid в Edit ***СкаЙ*** Помощь студентам 1 04.05.2007 08:16