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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка со StatusBar 
:(
    Опции темы
klyaksa
Дата 12.11.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

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



Есть StatusBar, в нем выводится разная информация, в том числе сколько времени прошло и осталось... (по таймеру 1 сек)
Две панели рисую сам (цветом чтобы выделить когда время мало), остальные text.
Так вот иногда вылазит ошибка canvas does not allow drawing. Раньше грешил на Инди (tcpclient и антифриз), но обратил внимания что всегда на статус баре что-то не прорисовано...
В чем может быть дело? Куда копать?

на всякий:

Код

procedure TStudentMainForm.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
var
  R:TRect;
  w, l: Integer;
  t, hh, nn, ss: word; //'hh:nn:ss'
begin

  if (Panel = StatusBar.Panels[4]) or (Panel = StatusBar.Panels[5]) then
  begin

      with StatusBar.Canvas do
      begin
        FillRect(Rect);
        if Panel.Text <> '' then
        begin
          if Length(Panel.Text) = 8 then begin  //'hh:nn:ss'
            hh := StrToIntDef(Copy(Panel.Text, 1, 2), 0);
            nn := StrToIntDef(Copy(Panel.Text, 4, 2), 0);
            ss := StrToIntDef(Copy(Panel.Text, 7, 2), 0);
            t := hh * 3600 + nn * 60 + ss;
          end
          else t := 0;

          if t<=60 then Font.Color := clRed;

          w := TextWidth(Panel.Text); 
          l := ((Rect.Right - Rect.Left) - w) div 2;

          TextOut(Rect.Left + l, Rect.Top, Panel.Text);

        end;
      end;
  end
end;


Это сообщение отредактировал(а) klyaksa - 12.11.2010, 19:29
PM MAIL   Вверх
Saboten
Дата 12.11.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Скорее всего проблема из-за таймера (2 потока пытаются одновременно что-то нарисовать в канвасе).
Как вариант перед рисованием сделать canvas.Lock а после рисования -  canvas.Unlock, тогда только один поток сможет рисовать.


PM MAIL WWW   Вверх
ZBugz
Дата 15.11.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(klyaksa @ 12.11.2010,  19:25)
В чем может быть дело? Куда копать?

Эта ошибка обычно возникает когда ты пытаешься сделать activecontol чему либо, что недоступно. Не обязательно сам activecontrol, имееться ввиду какой нибуть focus на что то либо что не существует, тот же form1.enable:=false и попытка что то сделать на ней...

Это сообщение отредактировал(а) ZBugz - 15.11.2010, 08:42
PM MAIL   Вверх
klyaksa
Дата 25.11.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

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



В программе для 2 панелей на статус баре ставлю psOwnerDraw - в StatusBar1DrawPanel  все закомментировал -- ошибка выскакивает. psText - все работает без ошибок.

Да и еще если задвинуть окно вниз за экран, то получить ошибку вероятность больше...

Это сообщение отредактировал(а) klyaksa - 25.11.2010, 21:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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