Форум: "Начинающим";
Текущий архив: 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