Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OnMouseDown и Refresh

26K
07 апреля 2008 года
angel2c
32 / / 29.11.2007
на канве формы нарисовано несколько точек. каждой точке соответствует параметр, который может быть либо 0, либо 1. в событии OnMouseDown я проверяю, какую кнопку нажал пользователь и где (над точкой или нет), после чего в случае необходимости изменяю параметр. далее нужно перерисовать канву. почему не работает Refresh в конце события OnMouseDown?
25K
08 апреля 2008 года
San_
42 / / 03.10.2007
Refresh это который Canvas->Refresh ?
если мой склероз мне не изменяет этот метод всего лишь сбрасывает установки Canvas в значения по умолчанию , т.е. цвет кисти , пера и т.д
и что либо рисовать он вообще то не должен
26K
08 апреля 2008 года
angel2c
32 / / 29.11.2007
нет, Refresh это который Form->Refresh. и тогда вроде бы канва должна перерисоваться, то есть выполнить опять событие OnPaint.. или я ошибаюсь?
25K
08 апреля 2008 года
San_
42 / / 03.10.2007
тогда такой тупой вопрос - а ты его вызываешь ?
или ты думаешь что он должен автоматом вызываться ?

нацарапал вот
Код:
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    Form1->Canvas->Rectangle(TRect(0,0,100,100));
        ShowMessage("OnPaint");
}
//------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Form1->Refresh();
}


при нажатии на кнопку все прекрасно работает
26K
08 апреля 2008 года
angel2c
32 / / 29.11.2007
конешно вызываю:p
этот код и у меня прекрасно работает.. а вот в событии OnMouseDown почему-то канва не рефрешится...
25K
08 апреля 2008 года
San_
42 / / 03.10.2007
пости код , а то мы тут гадать будем до морковкина заговенья
276
08 апреля 2008 года
Rebbit
1.1K / / 01.08.2005
А ты уверен что МаусДовн нужному обекту прописал. Может он не вызывается.
А вообще не советую прямо на форме рисовать. Лутше на TGraphic (если правильно написал название)
26K
08 апреля 2008 года
angel2c
32 / / 29.11.2007
закон данного форума - не знаешь ответа, проси код:p
вот пожалуста:
 
Код:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  // что хочешь здесь делай, последующий рефреш не срабатывает
  Form1->Refresh();
}


повторюсь - всё, что прописано в OnMouseDown работает, не срабатывает только рефреш. если окно программы после нажатия кнопки мыши перекрыть другим приложением? а потом вернуться, то окно будет перерисовано правильно.
8.8K
08 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
Приведи весь код!
С тем что ты привёл всё работает.
26K
08 апреля 2008 года
angel2c
32 / / 29.11.2007
хм.. странно, почему так..
Код:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
 if (nrez) // если загружены данные
 {
  w = Form1->Width - 110;
  Form = Form1;
  chto_nagali_mouse = Button;
  X0 = X;
  Y0 = Y;
  Videlenie_AddMenu(); // функция, которая проверяет, какая кнопка нажалась и где
  Form1->Refresh();
 }
}


функция выглядит примерно следующим образом:
Код:
for (int k10 = 0; k10 < nrez; k10++) // проверка для всех точек
   {
    if ((l + int(gorizotr + 10*gorizotr*(wgs84_y[k10]-wgs84_min_y)/(wgs84_max_y-wgs84_min_y)) - razm_to4ki < X0) && (X0 < l + int(gorizotr + 10*gorizotr*(wgs84_y[k10]-wgs84_min_y)/(wgs84_max_y-wgs84_min_y)) + razm_to4ki) && (b - int(vertotr + 10*vertotr*(wgs84_x[k10]-wgs84_min_x)/(wgs84_max_x-wgs84_min_x)) - razm_to4ki < Y0) && (Y0 < b - int(vertotr + 10*vertotr*(wgs84_x[k10]-wgs84_min_x)/(wgs84_max_x-wgs84_min_x)) + razm_to4ki)) // если кнопку нажали над точкой
    {
     if (chto_nagali_mouse == mbLeft)
     {
      if (videlenie[k10] == 0) videlenie[k10] = 1;
      else videlenie[k10] = 0;
     }
    }
   }


ну и OnPaint:
 
Код:
for (int k5 = 0; k5 < nrez; k5++)
   {
     Form->Canvas->Pen->Color = clBlack;
     if (videlenie[k5] == 1) Form->Canvas->Pen->Color = clRed;
     Form->Canvas->Brush->Color = Form->Canvas->Pen->Color;
     Form->Canvas->Ellipse(l + gorizotr - razm_to4ki, b - vertotr - 10*vertotr*(wgs84_x[k3]-wgs84_min_x)/(wgs84_max_x-wgs84_min_x) - razm_to4ki, l + gorizotr + razm_to4ki, b - vertotr - 10*vertotr*(wgs84_x[k3]-wgs84_min_x)/(wgs84_max_x-wgs84_min_x) + razm_to4ki);
   }
8.8K
08 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
У тебя ошибка гдето в функции Videlenie_AddMenu(); скорее всего в задании цикла трабла, попробуй посмотри состояние nrez перед вызовом функции. У мну эт единственный вариант проблемы.
26K
08 апреля 2008 года
angel2c
32 / / 29.11.2007
вряд ли вы правы..
nrez по-любому имеет какое-то значение. да и функция Videlenie_AddMenu() работает (проблема в том, что не удается поглядеть результат ее работы), её программа выполняет и даже выходит из неё (я создавал файл после неё и до рефреша - файл создавался).
то есть именно не-рефрешится! блин, что за фигня!.. у меня даж никаких соображений нету, почему так..
8.8K
09 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
Приведи полный листинг!
26K
09 апреля 2008 года
angel2c
32 / / 29.11.2007
совсем полный?:eek:
во-первых, мне это не очень можно делать, поскольку программа всё-таки коммерческая..
во-вторых, это очень-очень много!
в-третьих, проблемную ситуацию я обрисовал вроде достаточно (рисуем-нажали-перерисовываем) - код каждой операции я привёл.
повторю, что всё-всё работает - я тыщу раз проверил (картинка рисуется, параметр при нажатии изменяется какой надо), именно не выполняется refresh!

kot_, неужели я у тебя попал в игнор?:(
8.8K
09 апреля 2008 года
Se AD WMD
165 / / 10.01.2007
Тогда переустанавливай драйвер hands.sys, потомучто то, что ты привёл всё работает. Для отладки попробуй поставь функции ShowMessage("Bla"); непосредственно перед Form->Refresh(); и в начало и конец OnPaint и посматри где оно тебе покажет месеж, а где нет.
26K
10 апреля 2008 года
angel2c
32 / / 29.11.2007
ShowMessage() работает везде..:(
BCB я недавно переустанавливал, но эффекта никакого..
а hands.sys я вообще не смог найти.. он кто и откуда? и как его переустановить?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог