Главная страница
    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]

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



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

Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.005 c
2-1286186824
Overclocker
2010-10-04 14:07
2010.12.26
Работа с файлами


15-1284562158
Baks
2010-09-15 18:49
2010.12.26
Компоненты Indy для Delphi 5


15-1284722875
неокубинец
2010-09-17 15:27
2010.12.26
Частота тембра


15-1284305392
oxffff
2010-09-12 19:29
2010.12.26
Сходил за грибами и встретил медвежонка


2-1285681850
Роман
2010-09-28 17:50
2010.12.26
MouseMove





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский