Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

Графика   Найти похожие ветки 

 
Ghost del vonte   (2010-10-02 02:58) [0]

В моей программе надо рисовать на компоненте TDrawGrid, стоит свернуть программу или переключится на другое окно, рисование исчезает, как это устранить? (чтобы не исчезало)


 
Anatoly Podgoretsky ©   (2010-10-02 10:35) [1]

> Ghost del vonte  (02.10.2010 02:58:00)  [0]

Рисовать по другому


 
_Юрий   (2010-10-02 10:54) [2]

Надо рисовать в событии OnDrawCell или onPaint
чтобы в таких случаях перерисовывало
стандартное поведение


 
Ghost del vonte   (2010-10-02 12:40) [3]

Но я итак рисую в событии OnDrawCell, закрашиваю клеточки методом FillRect, автоматическая прорисовка отключена, что только не пробовал, все-равно исчезает....


 
Ghost del vonte   (2010-10-02 12:48) [4]


> Рисовать по другому

И как по другому? Рисуется нормально, но исчезает все рисование....


 
Anatoly Podgoretsky ©   (2010-10-02 12:52) [5]

> Ghost del vonte  (02.10.2010 12:40:03)  [3]

InvalidateRect/Refresh


 
Ghost del vonte   (2010-10-02 13:04) [6]


> InvalidateRect/Refresh

....Увы, но эти спобосы не помогают, все равно исчезает! Закрашиваешь несколько клеток, сворачиваешь, разворачиваешь программу, а клетки снова белые....


 
бумбум   (2010-10-02 13:56) [7]


> Ghost del vonte   (02.10.10 13:04) [6]

Интересно а как ты там рисуешь?

Вот я провериль и всё вез проблем:

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
DrawGrid1.canvas.brush.Color := clRed;
 If (ACol > 0) and (ARow>0) then
   DrawGrid1.canvas.fillRect(Rect);
end;


 
Ghost del vonte   (2010-10-02 14:02) [8]


>
> Интересно а как ты там рисуешь?

Вот так:

procedure TfmLora.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 if gdSelected in State then
 begin
   DrawGrid1.Canvas.Brush.Color:= DColor;
   DrawGrid1.Canvas.FillRect(Rect);
   InvalidateRect(DrawGrid1.Canvas.Handle, nil, false);
   StatusBar1.Panels[1].Text:= "Col: "+IntToStr(ACol)+" , Row: "+IntToStr(ARow);
 end;
end;


 
Ghost del vonte   (2010-10-02 14:08) [9]

InvalidateRect - это я недавно пробовал, не помогло, с помощью вашего кода, вообще закрашивается весь DrawGrid, а у меня по клеткам (выбранным)


 
бумбум   (2010-10-02 14:27) [10]

Вот так работает:

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
if gdSelected in State then
begin
  DrawGrid1.Canvas.Brush.Color:= clred;
  DrawGrid1.Canvas.FillRect(Rect);
  InvalidateRect(DrawGrid1.Canvas.Handle, nil, false);
//  StatusBar1.Panels[1].Text:= "Col: "+IntToStr(ACol)+" , Row: "+IntToStr(ARow);
end;
end;


 
Ghost del vonte   (2010-10-02 14:37) [11]


> Вот так работает:

Нет, все-равно исчезает..... бесполезно! Пробовал даже такое: перед минимизацией, записывал пикселы TCanvas у DrawGrid в файл, а перед активацией - чтение из файла и прорисовкой на канве компонента - тоже бесполезно!


 
Игорь Шевченко ©   (2010-10-02 14:46) [12]


>   InvalidateRect(DrawGrid1.Canvas.Handle, nil, false);


Убрать


 
Ghost del vonte   (2010-10-02 14:48) [13]


> Убрать

Убрал уже давно, мне просто тут посоветовали, я попробовал - бесполезно, и по привычки сохранил, а потом скопировал код сюда....


 
Плохиш ©   (2010-10-02 14:49) [14]

Ничего не исчезает, выделенную ячейку отрисовывает как и запрашиваешь.


 
Ghost del vonte   (2010-10-02 14:51) [15]


> Ничего не исчезает, выделенную ячейку отрисовывает как и
> запрашиваешь.

Рисует хорошо, но если сворачиваю программу а потом восстанавливаю (разворачиваю) - все исчезает, DefaultDrawing:= false!


 
бумбум   (2010-10-02 15:01) [16]

Вточ-ВточПопробуй вот так точно сработает:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   DrawGrid1: TDrawGrid;
   procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
if gdSelected in State then
begin
 DrawGrid1.Canvas.Brush.Color:= clred;
 DrawGrid1.Canvas.FillRect(Rect);
end;
end;
end.


 
Ghost del vonte   (2010-10-02 15:06) [17]


> Вточ-ВточПопробуй вот так точно сработает:

Все-равно не работает, исчезает! Я это все делаю на Дельфи 5, попробую установить Дельфи 7 и скомпилировать там, да еще полазить в исходнике компонента TDrawGrid, просто ощущение что автоматическая прорисовка не отключена.... рисование должно быть как в Borland-овском ImageEditor....


 
Anatoly Podgoretsky ©   (2010-10-02 15:58) [18]

if gdSelected in State then
Это перерисовывает только выделеную ячейку.


 
Ghost del vonte   (2010-10-02 16:03) [19]


> Это перерисовывает только выделеную ячейку.

И каким образом можно сделать, чтобы все выделенные ячейки (раскрашеные), при сворачивании а затем восстановлении окна не исчезали?


 
Плохиш ©   (2010-10-02 20:56) [20]


> И каким образом можно сделать, чтобы все выделенные ячейки
> (раскрашеные), при сворачивании а затем восстановлении окна
> не исчезали?

Ничего не исчезает, смените прокладку.


 
Ghost del vonte   (2010-10-02 21:07) [21]


> Ничего не исчезает, смените прокладку.

Я бы врать не стал! У меня все-равно исчезает! Что за прокладку?


 
Плохиш ©   (2010-10-02 21:11) [22]


> Я бы врать не стал! У меня все-равно исчезает!

При использовании приведённого в этой ветки кода, все выделенные ячейки отрисовываются после востановления формы.

> Что за прокладку?

между стулом и монитором.


 
Ghost del vonte   (2010-10-02 21:13) [23]


> между стулом и монитором.

Очень смешно! Я серьезно! У меня эффекта нет....


 
Ghost del vonte   (2010-10-02 21:16) [24]

У меня отрисовывается только последняя закрашенная клетка...


 
Плохиш ©   (2010-10-02 21:17) [25]


> У меня эффекта нет

Ничем помочь не могу.

PS. Трудно найти чёрную кошку в тёмной комнате, если её там нет.


 
Плохиш ©   (2010-10-02 21:18) [26]

Подозреваю, что в суперпуперпроге где-то сбрасывается крютым кодером обработчик OnDrawCell


 
Anatoly Podgoretsky ©   (2010-10-02 21:19) [27]

> Ghost del vonte  (02.10.2010 21:16:24)  [24]

Я тебе уже сообщил, что по коду у тебя закрашивается только ОДНА ячейка, а
ыт все не веришь


 
Anatoly Podgoretsky ©   (2010-10-02 21:21) [28]


> Подозреваю, что в суперпуперпроге где-то сбрасывается крютым
> кодером обработчик OnDrawCell

Да и это место
if gdSelected in State then


 
Ghost del vonte   (2010-10-02 21:22) [29]


> Я тебе уже сообщил, что по коду у тебя закрашивается только
> ОДНА ячейка, а
> ыт все не веришь

Почему не верю? Верю, но не знаю как сделать чтобы оставались закрашенными те, на которых рисовали!


 
Ghost del vonte   (2010-10-02 21:23) [30]


> Да и это место
> if gdSelected in State then

Когда я убираю это из кода, при восстановлении окна, окно DrawGrid закрашивается полностью...


 
Anatoly Podgoretsky ©   (2010-10-02 21:24) [31]

> Ghost del vonte  (02.10.2010 21:22:29)  [29]

Их тоже надо красить в обработчике.


 
Anatoly Podgoretsky ©   (2010-10-02 21:25) [32]

> Ghost del vonte  (02.10.2010 21:23:30)  [30]

Правильно, поскольку в этом случае, ты именно так и приказываешь делать.


 
Ghost del vonte   (2010-10-02 21:30) [33]


> Правильно, поскольку в этом случае, ты именно так и приказываешь
> делать.

Я уже запутался, как же тогда сделать? Приведенные здесь примеры у меня не работают, в смысле эффект один - полное закрашивание канвы компонента!


 
Плохиш ©   (2010-10-02 21:30) [34]


> Anatoly Podgoretsky ©   (02.10.10 21:19) [27]

У меня закрашиваются все выделенные стандартным способом ячейки.


 
Ghost del vonte   (2010-10-02 21:32) [35]

procedure TfmLora.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
//  if gdSelected in State then
//  begin
   DrawGrid1.Canvas.Brush.Color:= DColor;
   DrawGrid1.Canvas.FillRect(Rect);
   //InvalidateRect(DrawGrid1.Canvas.Handle, nil, false);
   //DrawGrid1.Invalidate;
   //Bitmap.Canvas.Brush.Color:= Panel1.Color;
   //Bitmap.Canvas.FillRect(Rect);
   StatusBar1.Panels[1].Text:= "Col: "+IntToStr(ACol)+" , Row: "+IntToStr(ARow);
//  end;
end;

Вот что у меня там стоит...


 
Плохиш ©   (2010-10-02 21:33) [36]


> Ghost del vonte   (02.10.10 21:30) [33]
> Я уже запутался, как же тогда сделать?

Надо использовать свои критерии для закраски ячеек, а все случаи, когда ячейка имеет свойство gdSelected, перечисленны в справки.


 
Плохиш ©   (2010-10-02 21:36) [37]


> Ghost del vonte   (02.10.10 21:32) [35]


> Вот что у меня там стоит...

и что, все ячейки должны быть закрашены цветом из переменной DColor. Берёшь отладчик и смотришь, что же за цвет в ней сохранён. А ещё наглядней вместо статусбара создаёшь мемо к примеру и пишешь туда координаты и значения этой переменной.


 
Ghost del vonte   (2010-10-02 22:07) [38]


> и что, все ячейки должны быть закрашены цветом из переменной
> DColor. Берёшь отладчик и смотришь, что же за цвет в ней
> сохранён. А ещё наглядней вместо статусбара создаёшь мемо
> к примеру и пишешь туда координаты и значения этой переменной.
>

Зря здесь нельзя видео размещать, не поленился бы этот процесс записать и показать.... ладно, закроем тему, не знаю, у меня Винда Виста, она не поддерживает справочную систему Дельфи 5 или 7!


 
Amoeba_   (2010-10-02 22:21) [39]


> у меня Винда Виста, она не поддерживает справочную систему
> Дельфи 5 или 7

Скачай с сайта MS Winhelp.exe для Vista, и будет тебе поддержка.


 
Ghost del vonte   (2010-10-02 22:56) [40]

Удалено модератором
Примечание: Один вопрос, одна тема.


 
Anatoly Podgoretsky ©   (2010-10-02 23:42) [41]


> у меня Винда Виста, она не поддерживает справочную систему
> Дельфи 5 или 7!

Она поддерживает


 
Германн ©   (2010-10-03 01:30) [42]

Не нашел в TDrawGrid чего-то подобного MultiSelect.
Как там у Плохиша что-то получается не понятно.


 
Германн ©   (2010-10-03 01:43) [43]

Забыл ещё сказать автору. (Замучен своей проблемой).
Если уж DefaultDrawing:= false, то надо самому рисовать всегда! А не только в некоторых случаях типа if gdSelected in State .
Да для ряда компонент из библиотеки VCL такое может пройти и даже действительно проходит. Но не надо полагаться на случай.


 
Плохиш ©   (2010-10-03 13:38) [44]


> Германн ©   (03.10.10 01:30) [42]
>
> Не нашел в TDrawGrid чего-то подобного MultiSelect.

Options значение goRangeSelect, по-умолчанию включено. Ячейки выделяются стандартным для вындовса способом, мышкой или стрелками с шифтом.


 
Ghost del vonte ©   (2010-10-03 16:09) [45]


> Забыл ещё сказать автору. (Замучен своей проблемой).
> Если уж DefaultDrawing:= false, то надо самому рисовать
> всегда! А не только в некоторых случаях типа if gdSelected
> in State .
> Да для ряда компонент из библиотеки VCL такое может пройти
> и даже действительно проходит. Но не надо полагаться на
> случай.

Если не сворачивать программу, или не переключаться на другие окна, то, все прекрасно, но ведь пользователь обязательно ее свернет, что уже делать не знаю.... придется оставить как есть и предупредить пользователей чтобы сохраняли перед сворачиванием или переключением на другие окна.....


 
бумбум   (2010-10-03 17:51) [46]

Выложи куда- нибудь с архивированный свой проект с глюком


 
Ghost del vonte ©   (2010-10-03 19:16) [47]


> Выложи куда- нибудь с архивированный свой проект с глюком

Могу на емайл прислать, программа у меня использует компоненты: XPControls, ZLib (поставляется с Дельфи версии 3), TPNGObject, всех их тоже могу прислать, программа пока еще в виде черновика....


 
Virgo_Style ©   (2010-10-03 21:59) [48]


> что уже делать не знаю.


Попытаться понять то, что тебе пишут.


 
Ghost del vonte ©   (2010-10-04 17:06) [49]


>
> Попытаться понять то, что тебе пишут.

А я по вашему развлекаюсь здесь чтоли? Я не пробовал все что здесь пишут и приводят? Говорю исчезает, все неверят, выложу потом главный юнит в двух частях!


 
Ghost del vonte ©   (2010-10-04 17:07) [50]

Удалено модератором
Примечание: Давай портянки публиковать в другом месте, а это оставим для общения.


 
Ghost del vonte ©   (2010-10-04 17:08) [51]

Удалено модератором


 
Ghost del vonte ©   (2010-10-04 17:28) [52]

Удалено модератором
Примечание: Обсуждение модерирования


 
Плохиш ©   (2010-10-04 17:48) [53]


> то может подкинете идею тогда?

Подкидываю идею - надо нанять программиста.


 
Ghost del vonte ©   (2010-10-04 17:53) [54]


> Подкидываю идею - надо нанять программиста.

Того, что создавал компонент TDrawGrid?
Я серьезно! Я перепробовал все, что только мог, и все то, что здесь советовали, - толку нет! Ладно, разберусь сам, кроме насмешек, ничего не вижу.... не верите и ладно! Спасибо всем за отнятое время!


 
Anatoly Podgoretsky ©   (2010-10-04 18:00) [55]

Прощай


 
Andy BitOff ©   (2010-10-04 18:08) [56]

> Ghost del vonte ©

Выложи куда-нибудь весь свой проект и компоненты/библиотеки, которые нужны, чтобы проект скомпилировался, кто-нибудь да посмотрит у нас есть тут добрые люди (пока еще) =)

> не верите и ладно

Мы тут не вопросы веры обсуждаем. Это тебе на другой форум. Тебе говорят, что все работает, если ты утверждаешь обратное - доказывай. Причем здесь вера? Показывай ВЕСЬ код. Сдается мне, что у тебя в другом месте ошибка, а ты к гриду привезался.


 
Ghost del vonte ©   (2010-10-04 18:10) [57]


> Мы тут не вопросы веры обсуждаем. Это тебе на другой форум.
>  Тебе говорят, что все работает, если ты утверждаешь обратное
> - доказывай. Причем здесь вера? Показывай ВЕСЬ код. Сдается
> мне, что у тебя в другом месте ошибка, а ты к гриду привезался.
>

Возможно, сделаю....


 
Плохиш ©   (2010-10-04 18:16) [58]


> Ghost del vonte ©   (04.10.10 17:53) [54]
> Я серьезно! Я перепробовал все, что только мог, и все то,
>  что здесь советовали, - толку нет!

Я создал новый проект, бросил на форму TDrawGrid, создал обработчик OnDrawCell, скопировал в него приведённый здесь код, запустил проект на выполнение. Текущая ячейка отрисовалась красным, минимизировал форму, востановил - ячейка отрисовалась красным. Выделил несколько ячеек - они отрисовались красным, минимизировал - востановил форму - ячейки всё-равно отрисовались красным.
Так кому я должен верить, вам или своим глазам?


 
Ghost del vonte ©   (2010-10-04 18:18) [59]


> Я создал новый проект, бросил на форму TDrawGrid, создал
> обработчик OnDrawCell, скопировал в него приведённый здесь
> код, запустил проект на выполнение. Текущая ячейка отрисовалась
> красным, минимизировал форму, востановил - ячейка отрисовалась
> красным. Выделил несколько ячеек - они отрисовались красным,
>  минимизировал - востановил форму - ячейки всё-равно отрисовались
> красным.
> Так кому я должен верить, вам или своим глазам?

А разве я говорил вам что неверю тому, что вы говорите? Я просто не пойму почему у меня так не получается....
Вот архив моего проекта со всеми компонентами для его правильной работы, может вы сможете найти эту ошибку, которая мешает отрисовке!

http://files.mail.ru/WOO0B0


 
Плохиш ©   (2010-10-04 19:25) [60]


> Ghost del vonte ©   (04.10.10 18:18) [59]

Не надо пытаться обмануть систему
или включи DefaultDrawing
или тебе в [43] же сказали

procedure TfmLora.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
 if gdSelected in State then
 begin
   DrawGrid1.Canvas.Brush.Color:= DColor;
   //FillRect(DrawGrid1.Canvas.Handle, Rect, 0);
   DrawGrid1.Canvas.FillRect(Rect);
   //InvalidateRect(DrawGrid1.Canvas.Handle, nil, false);
   //DrawGrid1.Invalidate;
   //Bitmap.Canvas.Brush.Color:= Panel1.Color;
   //Bitmap.Canvas.FillRect(Rect);
   StatusBar1.Panels[1].Text:= "Col: "+IntToStr(ACol)+" , Row: "+IntToStr(ARow);
 end

 else
 begin
   DrawGrid1.Canvas.Brush.Color:= DrawGrid1.Color;
   DrawGrid1.Canvas.FillRect(Rect);
   StatusBar1.Panels[1].Text:= "Col: "+IntToStr(ACol)+" , Row: "+IntToStr(ARow);
 end;

end;



Страницы: 1 2 вся ветка

Текущий архив: 2010.12.26;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.01 c
15-1284722875
неокубинец
2010-09-17 15:27
2010.12.26
Частота тембра


15-1284644940
slayer90
2010-09-16 17:49
2010.12.26
Microsoft® SQL Server® 2008 Express


2-1285851032
coder123
2010-09-30 16:50
2010.12.26
Как найти открытую форму по типу и по части названия?


2-1285589727
istok
2010-09-27 16:15
2010.12.26
convert LSA_UNICODE_STRING to string


15-1284668967
Юрий
2010-09-17 00:29
2010.12.26
С днем рождения ! 17 сентября 2010 пятница