Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.005 c
15-1284388417
Кто б сомневался
2010-09-13 18:33
2010.12.26
InnoSetup и манифест


3-1248861056
Maska
2009-07-29 13:50
2010.12.26
insert в FireBird


2-1286133494
Sperry
2010-10-03 23:18
2010.12.26
"обратный цыкл"


15-1284321619
DVM
2010-09-13 00:00
2010.12.26
С Днем Программиста!!!


4-1243039481
Warner
2009-05-23 04:44
2010.12.26
Эмулирование нажатия комбинации клавиш CTRL+<стрелка>





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский