sm1ke Опубликовано 9 апреля, 2010 Жалоба Поделиться Опубликовано 9 апреля, 2010 Практическое занятие № 4.7 (2). Раскраска (Продолжение)И наконец, запрограммируем «маляра».Выделим таблицу sgBidAsk и перейдем в инспекторе объектов на вкладку Events. Создадим реакцию на событие OnDrawCell. Проблема вся в том, что в StringGrid нет методов закрашивания отдельных ячеек и изменения цвета шрифта в этих ячейках, а посему будем все делать (раскрашивать) ручками, через объект Canvas (холст). http://s42.radikal.ru/i096/1004/ff/1b4798f5ef43.gif И начинаем писать… void __fastcall TForm1::sgBidAskDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { // Если в ячеке пусто - выходим if (sgBidAsk->Cells[ACol][ARow].IsEmpty()) return; // Если ячейка фиксированная - выходим if (State.Contains(gdFixed)) return; // Если текст if (rgColor->ItemIndex == 1) { // Ask или Bid if (ACol == 1 || ACol == 2) { // Если новое значение ячеки больше или равно предыдущего // Тогда цвет шрифта синий // в противном случае красный if (TextToDouble(sgBidAsk->Cells[ACol][ARow]) >= PrevQuote[ACol - 1][ARow - 1]) sgBidAsk->Canvas->Font->Color = clBlue; else sgBidAsk->Canvas->Font->Color = clRed; // Забираем текст из ячейки AnsiString s = sgBidAsk->Cells[ACol][ARow]; // и переривовываем его новым цветом sgBidAsk->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, s); } } // Если ячейка if (rgColor->ItemIndex == 2) { // Ask или Bid if (ACol == 1 || ACol == 2) { // Если новое значение ячеки больше или равно предыдущего // Тогда цвет киски светлозеленый // в противном случае красный if (TextToDouble(sgBidAsk->Cells[ACol][ARow]) >= PrevQuote[ACol - 1][ARow - 1]) sgBidAsk->Canvas->Brush->Color = clLime; else sgBidAsk->Canvas->Brush->Color = clRed; // Копируем текст AnsiString s = sgBidAsk->Cells[ACol][ARow]; // Заливаем регион sgBidAsk->Canvas->FillRect(Rect); // Пишем текст sgBidAsk->Canvas->TextRect(Rect, Rect.Left + 2, Rect.Top + 2, s); } } // Во всех остальных случаях по умолчанию } Вообще-то говоря, можно было сравнивать значения только одного типа (bid или ask) - в большинстве случаев спред у ДЦ фиксированный, но мы оставим так как есть, на случай работы с брокером, у которого плавающий спред. Чем больше возможностей у программы, тем шире спектр применения. И еще пару украшательств…Изменим шрифт в нашей таблице – сделаем его жирным и увеличим размер: http://i037.radikal.ru/1004/cf/644c5c11021b.gif И наконец. Добавим событие onclick для нашего группового переключателя rgColor. void __fastcall TForm1::rgColorClick(TObject *Sender) { sgBidAsk->Invalidate(); } Вызов этого метода перерисует нашу таблицу, когда мы будем переключаться между режимами. Без него, придется ждать перерисовки таблицы до появления новой котировки.F9, смотрим… http://s58.radikal.ru/i160/1004/4f/5d91daa55a07.gif Самостоятельно:- как обычно, делаем для других валютных пар.Quote_Event_Color_release.zipQuote_Event_Color_source.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
sm1ke Опубликовано 9 апреля, 2010 Жалоба Поделиться Опубликовано 9 апреля, 2010 Практическое занятие № 4.8. Приложение «в динамике». «В динамике» не следует понимать буквально. Программу в динамик мы конечно запихивать не будем. Конечно, Вы догадались, что мы будем использовать динамическое создание объектов. … Ссылка на комментарий Поделиться на другие сайты Поделиться
PetrMFXV Опубликовано 11 мая, 2010 Жалоба Поделиться Опубликовано 11 мая, 2010 И наконец. Добавим событие onclick для нашего группового переключателя rgColor. void __fastcall TForm1::rgColorClick(TObject *Sender) { sgBidAsk->Invalidate(); } Вызов этого метода перерисует нашу таблицу, когда мы будем переключаться между режимами. Без него, придется ждать перерисовки таблицы до появления новой котировки.F9, смотрим… Если требуется немедленная перерисовка, то лучше использовать метод Update: sgBidAsk->Update(). Для таких компонентов как гриды(сетка) при полной перерисовке лучше вообщеиспользовать метод Refresh()(который вызовет Repaint, который в свою очередь вызовет Invalidate, а затем Update) и не мучиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yuira Опубликовано 3 декабря, 2011 Жалоба Поделиться Опубликовано 3 декабря, 2011 Здравствуйте, не знал куда обратиться, поэтому пишу сюда.Нашел исходник History Analist у вас на сайте.Просто она похожа на курсовую.Возникла проблема:1) когда загружаю базу в csv потом тыкаю расчет выводит ошибку и показывает на закрытый оператор, я не могу понять в чем проблема?2) А когда другую базу устанавливал выводило ошибку с "8 is not valid integer value Прошу помощи, курсач на неделе сдавать) Ссылка на комментарий Поделиться на другие сайты Поделиться
Mr.Bags Опубликовано 12 декабря, 2011 Жалоба Поделиться Опубликовано 12 декабря, 2011 все просто- эта ошибка возникает в момент попытки преобразования текса в вещесвенное число. и приэтом в знак разделителя не совпадает с системным. надо поменять знак разделения дробной части и все заработает. Ссылка на комментарий Поделиться на другие сайты Поделиться
pkapts Опубликовано 24 июня, 2012 Жалоба Поделиться Опубликовано 24 июня, 2012 это какие-то поделки, а не обучение С++.обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов. Ссылка на комментарий Поделиться на другие сайты Поделиться
black_panther Опубликовано 23 февраля, 2016 Жалоба Поделиться Опубликовано 23 февраля, 2016 это какие-то поделки, а не обучение С++.обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов.плюсую Ссылка на комментарий Поделиться на другие сайты Поделиться
Павел Лихой Опубликовано 30 марта, 2016 Жалоба Поделиться Опубликовано 30 марта, 2016 это какие-то поделки, а не обучение С++.обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов.плюсую Так вопрос не соответствует названию темы. Тут вопрос технической поддержки, условно говоря, а название темы - начальное обучение. Но вообще интересно бы посмотреть. как и кто пишет роботов и прочие примочки для трейдинга.Первый вопрос, а допускается ли такое? Есть стандарт или все эти терминалы МТ4 или МТ5 являются закрытыми программами, без взаимодействия с расширениями и так далее. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения