Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк с перерисовкой TPictureBox 
:(
    Опции темы
Guest_Limonadni Joe
  Дата 29.1.2003, 06:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В обработчике события ondraw TPictureBox стоит процедура, которая рисует пару десятков линий и столько же надписей на нём. При перемещении какого-либо окна над picturebox возникает искажение изображения (линии рассыпаются на точки, надписи размазываются). Причём, если где-нибудь в другом месте вызвать эту процедуру, то всё рисуется нормально; при свворачивании-разворачивании окна картинка так же рисуется нормально. Пожалуйста объясните кто-нибудь из-за чего этот глюк и как его исправить. Очень нужно sad.gif
  Вверх
stab
Дата 29.1.2003, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



TPictureBox -- это ты где нашел такой? Delphi 7?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Unregistered
Дата 30.1.2003, 05:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











По-моему и раньше был.
  Вверх
dr.ZmeY
Дата 30.1.2003, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Политолог
****


Профиль
Группа: Участник Клуба
Сообщений: 3892
Регистрация: 26.3.2002
Где: ..::STALINGRAD::. .

Репутация: нет
Всего: 60



Может ТPaintBox?


--------------------
PM MAIL WWW ICQ Skype   Вверх
stab
Дата 30.1.2003, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



или TImage ?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 30.1.2003, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



эт в VB вроде был PictureBox


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Unregistered
Дата 1.2.2003, 03:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да, точно TPaintBox (совсем крыша поехала).
  Вверх
Unregistered
Дата 1.2.2003, 03:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите. Рисование на этом PaintBox - основная функция программы.
  Вверх
stab
Дата 1.2.2003, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



а у тя процедура рисование вызывается при OnPaint TPaintBox'а? TPaintBox не сохраняет сам то, что в нем нарисовано и каждый раз надо при OnPaint все перерисовывать.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
L. Joe
Дата 2.2.2003, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2003
Где: Москва, м. Севаст опольская

Репутация: нет
Всего: нет



Да, вызов процедуры стоит в OnPaint TPaintBox'а. А надо чтобы где стоял?
PM MAIL WWW   Вверх
December
Дата 2.2.2003, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Может, с ClipRect что-то намудрил? покажи код.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
L. Joe
Дата 2.2.2003, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2003
Где: Москва, м. Севаст опольская

Репутация: нет
Всего: нет



Код очень простой:
Код

procedure TfrmMain.ptbGraphPaint(Sender: TObject);
begin
Draw(ptbGraph.Canvas); //аргумент процедуры - Canvas, на котором надо рисовать
end;

Нигде ClipRect я не использовал. Остальные вызовы процедуры Draw стоят в тех местах, когда надо менять изображение. Да, и ещё - PictureBox расположен на Panel.
PM MAIL WWW   Вверх
December
Дата 2.2.2003, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Дык саму Draw покажи!


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
L. Joe
  Дата 2.2.2003, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2003
Где: Москва, м. Севаст опольская

Репутация: нет
Всего: нет



Сейчас. Ничего сверхестественного в ней нет. Некоторые переменные могут быть непонятны - но думаю это не важно.
Код

 width:=canvas.ClipRect.Right;
 height:=canvas.ClipRect.Bottom;
 with canvas do begin
 pen.Width:=1;
//background
 Brush.Style:=bsSolid;
 Brush.Color:=BackgColor;
 pen.Style:=psClear;
 Rectangle(ptbGraph.ClientRect);

//horizontal lines
 if LHVisible1 = true then begin
   if LHVisible2 = true then begin
     pen.Style := StrToPenstyle(LHStyle2);
     pen.Color := LHColor2;
     i:=my;
     while i > 0 do begin
       MoveTo(1,i); LineTo(Width-1,i);
       i:=i-Round(stepv/2*zoom);
     end;
     i:=my;
     while i < ptbGraph.Height do begin
       MoveTo(1, i); LineTo(Width - 1, i);
       i := i + Round(stepv / 2 * zoom);
     end;
   end;

   pen.Style:=StrToPenstyle(LHStyle1);
   pen.Color:=LHColor1;
   i := my;
   while i > 0 do begin
     MoveTo(1, i); LineTo(Width - 1, i);
     i := Round(i - stepv * zoom);
   end;
   i := my;
   while i < Height do begin
     MoveTo(1, i); LineTo(Width - 1, i);
     i:=Round(i + stepv * zoom);
   end;
 end;

//vertical lines
 if LVVisible1=true then begin
   if LVVisible2=true then begin
     pen.Style:=StrToPenstyle(LVStyle2);
     pen.Color:=LVColor2;
     i:=mx;
     while i > 0 do begin
       MoveTo(i,1); LineTo(i,Height-1);
       i:=i - Round(steph / 2 * zoom);
     end;
     i:=mx;
     while i < Width do begin
       MoveTo(i,1); LineTo(i,Height-1);
       i:=i + Round(steph / 2 * zoom);
     end;
   end;

   pen.Style := StrToPenstyle(LVStyle1);
   pen.Color := LVColor1;
   i := mx;
   while i > 0 do begin
     MoveTo(i, 1); LineTo(i, Height - 1);
     i := Round(i - steph * zoom);
   end;
   i := mx;
   while i < Width do begin
     MoveTo(i, 1); LineTo(i, Height - 1);
     i:=Round(i + steph * zoom);
   end;
 end;

//h. axis
 if AHVisible=true then begin
   pen.Style:=StrToPenstyle(AHStyle);
   pen.Color:=AHColor;
   moveto(0,my); lineto(Width,my);
 end;

//v. axis
 if AVVisible=true then begin
   pen.Style:=StrToPenstyle(AVStyle);
   pen.Color:=AVColor;
   moveto(mx,0); lineto(mx,Height);
 end;
 
//horizontal captions
 if CHVisible = true then begin
   font := CHFont;
   i := mx;
   while i < Width + 1  do begin
     TextOut(i - round(textwidth(FloatToStr((i - mx) / steph / zoom)) / 2),
                   my + CHSpace,
                   FloatToStr((i - mx) / (steph * zoom)));
     i := Round(i + steph * zoom);
   end;
   i := mx;
   while i > 0  do begin
     TextOut(i - round(textwidth(FloatToStr((i - mx) / steph / zoom)) / 2),
                   my + CHSpace,
                   FloatToStr((i - mx) / (steph * zoom)));
     i := Round(i - steph * zoom);
   end;
 end;

//vertical captions
 if CVVisible = true then begin
   font := CVFont;
   i := round(my + stepv * zoom);
   while i < Height do begin
     TextOut(mx-textwidth(FloatToStr( - (i - my) / stepv/ zoom)) - CVSpace,
                   i - round(textheight(FloatToStr((i - mx) / stepv / zoom))/2),
                   FloatToStr( - (i - my) / stepv / zoom));
     i := Round(i + stepv * zoom);
   end;
   i := round(my - stepv * zoom);
   while i > 0  do begin
     TextOut(mx-textwidth(FloatToStr( - (i - my) / stepv / zoom)) - CVSpace,
                   i - round(textheight(FloatToStr((i - mx) / stepv / zoom)) / 2),
                   FloatToStr( - (i - my) / stepv / zoom));
     i := Round(i - stepv * zoom);
   end;
 end;


//right arrow
  if (AHArrow = true) and (AHVisible = true) then begin
    moveto(Width-8,my-3); lineto(Width-2,my); moveto(Width-8,my+3); lineto(Width-1,my);
    font:=AHFont;
    textout(Width-TextWidth(AHCaption)-3,my+4,AHCaption);
  end;

//top arrow
  if (AVArrow = true) and (AVVisible = true) then begin
    moveto(mx-3,7); lineto(mx,1); moveto(mx+3,7); lineto(mx,0);
    font:=AVFont;
    textout(mx-TextWidth(AVCaption)-4,1,AVCaption);
  end;

Дальше ещё идёт код, который никакой иформации, думаю, не прибавит - его не понять если не знать код всей программы. Я его закомментаривал, но от этого глюк не пропадал - значит он (код) не так уж важен.
PM MAIL WWW   Вверх
December
Дата 3.2.2003, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Цитата(L @ 2.2.2003, 15:41)
Код

 width:=canvas.ClipRect.Right;
 height:=canvas.ClipRect.Bottom;


Блин! А это чтоconfused.gif Насколько я помню, ClipRect именно при отрисовке части окна из-за движения над ним какой-нибудь гадости и используется.
Но могу и ошибаться. wink.gif


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
December
Дата 3.2.2003, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Остальное вроде в порядке - если переменные mx и my у тебя глобальные.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
L. Joe
  Дата 3.2.2003, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 1.2.2003
Где: Москва, м. Севаст опольская

Репутация: нет
Всего: нет



Огро-о-омное спасибо! colgate.gif . Всё-таки надо делать перерывы в работе - а то мой чайник совсем затуманится hehe.gif . И как я не заметил этот клипрект confused.gif . Теперь понятно почему части изобранения, которые должнны были появлятся с краю PictureBox, появлялись сразу под передвигающимся окном cool.gif.

December, ты мне правда очень помог adv/72.gif. В такой команде я бы никогда не заподозрил виновницу глюка.
adv/partyguy.gif
PM MAIL WWW   Вверх
December
Дата 3.2.2003, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



Always welcome.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.