Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование в StringGrid 
:(
    Опции темы
Гость_Михаил
Дата 28.2.2005, 14:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть StringGrid размером 20х20. На форме видно 10х10. Рисую кусочки схемы в каждой ячейку (Canvas.MoveTj и LineTo). НО!!!
при прокрутку Грида нарисованное стирается.
ВОПРОС: Как сделать, чтобы нарисованное изображение оставалось при прокрутке?
Размеры ячеек, их количество менять НЕЛЬЗЯ.

  Вверх
Александра
Дата 28.2.2005, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



Михаил, а вы где рисуете? Рисуйте в обработчике события OnDrawCell
--------------------
PM   Вверх
~FoX~
Дата 28.2.2005, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var
 bit: TBitmap;
begin
 bit:=TBitmap.Create;
 bit.LoadFromFile('c:\1.BMP');
 Rect:= Form1.StringGrid1.CellRect(3, 3);
 Form1.StringGrid1.Canvas.Brush.Bitmap:= bit;
 Form1.StringGrid1.Canvas.FillRect(Rect);
end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Александра
Дата 28.2.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



а вот и пример, только, конечно про загрузку картинки в обработчике Фокс пошутил ;)
--------------------
PM   Вверх
Guest
Дата 28.2.2005, 15:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile
не-е-е-е... картинка не пойдёт.

Проясняю ситуацию:
StringGrid должен представлять собой большую принципиальную электросхему, собираемую их "кирпичиков" - отдельных элементов, которые выбираются из меню и ставятся в определённую ячейку.
Так вот, как только я начинаю её (схему, Грид) прокручивать, то, что было нарисовано уходит за край, а при обратной прокрутке стирается.
А она нужна мне ЦЕЛИКОМ!!!!

Ох! smile вроде пояснил, ЧЕГО я хочу! smile

  Вверх
Александра
Дата 28.2.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



не, не понятно!

Фоксик тебе пример привел, как рисовать в одной ячейки и чтобы оно не стиралось! так смотри что у тебя в какой ячейки и рисуй свои "кирпичики"! Все верно!
--------------------
PM   Вверх
Guest
Дата 28.2.2005, 15:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я же писал в первом сообщении-вопросе: я рисую LineTo, Ellipse и MoveTo !
а ячкйка выбирается (становится активной) щелчком мышки, по которому в ней И ДОЛЖЕН ПОЯВИТЬСЯ ФРАГМЕНТ СХЕМЫ.
  Вверх
ningen
Дата 28.2.2005, 16:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ты должен хранить в ячейке (например, в массиве Objects,
или в самом тексте Cells) информацию о том, какой элемент
схемы в какой ячейке рисуется, и использовать эту информацию
при рисовании ячейки.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
bmpIdx: Integer;
bmp: TBitmap;
begin
bmpIdx := (Sender as TStringGrid).Objects[ACol, ARow];
bmp := МассивЭлементовСхемыСозданныйЗаранее[bmpIdx];
(Sender as TStringGrid).Canvas.Draw(Rect.X, Rect.Y, bmp);
end;
  Вверх
Александра
Дата 28.2.2005, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 7
Всего: 12



Какая разница как вы рисуете, вам просто НУЖНО рисовать в этом обработчике события и все!!!
--------------------
PM   Вверх
ningen
Дата 28.2.2005, 16:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











если рисуешь LineTo и тп,
сделай абстрактный объект

TElem = class
public
procedure Draw(Canvas: TCanvas; Rect: TRect); virtual; abstract;
end;

от него напиши кучу наследников для разных элементов схемы.

При клике на ячейку заноси в
(Sender as TStringGrid).Objects[ACol, ARow]
нужный объект (создай или возьми из пула),

а при рисовании ячейки дай ему себя нарисовать:

Код

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var elem: TElem;
begin
  elem := TElem((Sender as TStringGrid).Objects[ACol, ARow]);
  if elem <> nil then
    elem.Draw( (Sender as TStringGrid).Canvas, Rect);
end;


Ну потом при закрытии не забудь уничтожить эти объекты
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.