Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/56: Рейтинг темы: голосов - 56, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81

Перерисовка StringGrid

24.04.2015, 11:10. Показов 11872. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос такой , есть свойство DrawText(StringGrid1.Canvas.Handle,PChar (text),length(text),Rect,DT_WORDBREAK );
позволяющее нарисовать текст в таблице многостаночные ячейки, эта процедура вызывается каждый раз при любом изменении таблицы, как можно заставить ее просто перерисовывать таблицу не зная содержимого? ибо не могу понять как это сделать , а примеры нашел только те где конкретно задают чем заполнять таблицу например в text:='уии иииииии ииии ииииии'
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2015, 11:10
Ответы с готовыми решениями:

Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
Нужно чтобы из Stringgrid1 данные переносились в Stringgrid2 Но ТОЛЬКО ПО УСЛОВИЮ Таблицы Stringgrid2 На рис всё показано. За работающий...

StringGrid: проверить, имеется ли строка с ключевым полем во втором StringGrid-е
Имеются два StringGrid'a, у каждого есть ключевое поле. В первом sg значения ключевого поля могут повторятся, во втором нет. Нужно...

Содержимое выделенной строки из первого StringGrid-а перенести во второй StringGrid
Нужно написать программу которая выполняет следующие действия. Есть два StringGrid. По нажатия на кнопку, Содержимое выделенной строки из...

20
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.04.2015, 11:18
DrawText - это API-функция, а не свойство. У грида есть событие OnDrawCell, которое вызывается каждый раз, когда соответствующая ячейка должна перерисовываться. Текст, хранящийся в ячейке известен ВСЕГДА, для этого есть свойство Cells, и по номеру строки/столбца можно вытащить текст, содержащийся в заданной ячейке. Так что непонятно, чего ты хочешь. Как перерисовывать что-то, не зная, что именно перерисовывается?
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 11:40  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
i:integer;
  yach: string;
begin
  for i := 0 to StringGrid1.ColCount do
  begin
    yach := StringGrid1.Cells[i, 0];
    DrawText(StringGrid1.Canvas.Handle, PChar(yach), Length(yach), Rect, DT_WORDBREAK);
  end;
  end;
правильно понимаю что он должен будет перерисовать только первую строку таблицы?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.04.2015, 11:43
Этот код неправильный. Не нужно вызывать ничего в цикле внутри обработчика OnDrawCell. Это событие и так срабатывает для каждой ячейки таблицы. Просто рисуй то, что хранится в Yach. Цикл - убери.

А проверить, какая это строка в данный момент отрисовывается, можно по параметру ARow.
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 11:51  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
i,j:integer;
  yach: string;
  Flag: Cardinal;
begin
    yach := StringGrid1.Cells[i, j];
    flag:=Flag or DT_WORDBREAK;
    DrawText(StringGrid1.Canvas.Handle, PChar(yach), Length(yach), Rect, flag);
  end;
переделал в это , ничего не происходит вообще
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
24.04.2015, 11:55
Цитата Сообщение от VovkaAl Посмотреть сообщение
yach := StringGrid1.Cells[i, j];
А надо было
Delphi
1
yach := StringGrid1.Cells[ACol, ARow];
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.04.2015, 12:00
Ты вообще понимаешь, что делаешь? Что такое i, j? Получать текст текущей ячейки нужно через
Delphi
1
yach := StringGrid1.Cells[ACol, ARow];
Итого:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  yach: string;
  Flag: Cardinal;
begin
  StringGrid1.DefaultDrawing := False;
  yach := StringGrid1.Cells[ACol, ARow];
  Flag := Flag or DT_WORDBREAK;
  DrawText(StringGrid1.Canvas.Handle, PChar(yach), Length(yach), Rect, Flag);
end;
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 12:00  [ТС]
ПРимерно стал понимать, спасибо , теперь надо подумать почему в ячейках значения накладываются.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
24.04.2015, 12:02
VovkaAl, внимательно читай в моем коде 7-ую строку. Если рисуешь вручную, то дефолтную отрисовку надо отключать.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
24.04.2015, 12:03
Цитата Сообщение от VovkaAl Посмотреть сообщение
теперь надо подумать почему в ячейках значения накладываются.
Наверно потому что DefaultDrawing не выключил.
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 12:04  [ТС]
Столько уроков пересмотрел и литературы перечитал , а на практике не научусь применять.. Спасибо
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 12:59  [ТС]
Вот так он загружает таблицы с кодом который Вы дали
Миниатюры
Перерисовка StringGrid   Перерисовка StringGrid  
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,661
Записей в блоге: 21
24.04.2015, 13:50
чтобы грид полностью перерисовался, и вызвал твою процедуру для каждой ячейки
скажи ему
grid1.Invalidate;
1
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 13:54  [ТС]
Это надо ему сказать в этой процедуре?
Delphi
1
procedure TForm1.StringGrid1DrawCell
или это ему надо сказать в процедуре заполнения стринг грида новой таблицей? попробовал добавить и в конце и в начале обеих процедур реакции никакой
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
24.04.2015, 14:03
Цитата Сообщение от krapotkin Посмотреть сообщение
скажи ему
grid1.Invalidate;
Имхо тут нет причин дополнительно вызывать перерисовку.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,661
Записей в блоге: 21
24.04.2015, 14:16
Цитата Сообщение от VovkaAl Посмотреть сообщение
как можно заставить ее просто перерисовывать таблицу не зная содержимого
я просто не очень понял этот фрагмент исходного вопроса
поэтому на всякий случай добавил 5 копеек)

Добавлено через 1 минуту
у автора скорее всего неправильно заполняются сами ячейки,
если отключить OnDrawCell вообще - все правильно рисуется?
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 14:18  [ТС]
Многострочные ячейки получились) только теперь проблема с тем что рефреш не помогает с проблемой перекрытия, остаются полосы от таблицы вызванной до этого .

Добавлено через 1 минуту
Цитата Сообщение от krapotkin Посмотреть сообщение
у автора скорее всего неправильно заполняются сами ячейки,
если отключить OnDrawCell вообще - все правильно рисуется?
да с отключенным всё нормально. но его я пытаюсь использовать для многострочного текста в ячейках и выравнивания его в них.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
24.04.2015, 14:22
Цитата Сообщение от VovkaAl Посмотреть сообщение
остаются полосы от таблицы вызванной до этого .
А как и где меняешь высоту ячеек?
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
24.04.2015, 16:01  [ТС]
Высоту ячеек меняю программно. На кнопке стоит изменение колво столбцов и строк на размер массива. И там же уаеличиваю просто до 100 высоту 0ой строки .
0
0 / 0 / 0
Регистрация: 11.02.2015
Сообщений: 81
25.04.2015, 08:47  [ТС]
В чем ещё может быть проблема?
код drawcell
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  yach: string;
  Flag: Cardinal;
begin
 
   form1.StringGrid1.DefaultDrawing := False;
  yach := form1.StringGrid1.Cells[ACol, ARow];
  Flag := DT_CENTER or DT_WORDBREAK;
  DrawText(form1.StringGrid1.Canvas.Handle, PChar(yach), Length(yach), Rect, Flag);
end;
код заполнения столбца к примеру
Delphi
1
2
3
4
5
  for i := 1 to mm.Count do
  begin
    Form1.StringGrid1.Cells[0, i] := floattostr(i);
  end;
  form1.StringGrid1.Refresh;
скрин что будет если по переключаться между таблицами
Миниатюры
Перерисовка StringGrid  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2015, 08:47
Помогаю со студенческими работами здесь

Необходимо сложить ячейки в столбце Stringgrid и вывести в другой Stringgrid
Необходимо сложить ячейки в столбце Stringgrid и вывести в другой Stringgrid Количество столбцов и строк задается пользователем

Значение одной ячейки первого StringGrid-а присвоить другой ячейке второго StringGrid-а
скажите пожалуйста, вот нам даны две таблицы stringgrid, как значение одной ячейки,первой таблицы, присвоить другой ячейке второй таблице?

Перенос столбца(информации) из StringGrid в другой StringGrid
Не могу разобраться с тем, как перенести значения(нажатием кнопки "записать") выданные программой в 1 таблице,из крайнего столбца, во 2...

Вывод в StringGrid из Word, а из StringGrid в круговую диаграмму
Изначально необходимо с первой формы из нескольких компонентов(эдиты, комбобоксы и дататайм) собрать данные и вывести в строку вордовского...

Перенос столбца из StringGrid в другой StringGrid
Здравствуйте подскажите как перенести данные из столбца № 2 StringGrid2, в столбца № 2 StringGrid1.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru