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

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



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

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

Наверх




Память: 0.56 MB
Время: 0.011 c
15-1284541924
KSergey
2010-09-15 13:12
2010.12.26
RDP через WEB


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


2-1285888495
v_a_belousov
2010-10-01 03:14
2010.12.26
Проблема с процедурой


2-1285840973
Рома
2010-09-30 14:02
2010.12.26
idhttp


15-1284562752
Unknown_user
2010-09-15 18:59
2010.12.26
Написание собственного COM сервера автоматизации