Light Style© by Fisana

Перейти к содержимому


Инвестиционные фонды NordFx: профессиональное управление и прозрачность


NordFX

Фотография

Начальное обучение (Практика)


  • Пожалуйста, авторизуйтесь, чтобы ответить
22 ответов в этой теме

#16 sm1ke

sm1ke

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 174 сообщений

Опубликовано 09 Апрель 2010 - 11:01

Практическое занятие № 4.7 (2). Раскраска (Продолжение)
И наконец, запрограммируем «маляра».
Выделим таблицу sgBidAsk и перейдем в инспекторе объектов на вкладку Events. Создадим реакцию на событие OnDrawCell. Проблема вся в том, что в StringGrid нет методов закрашивания отдельных ячеек и изменения цвета шрифта в этих ячейках, а посему будем все делать (раскрашивать) ручками, через объект Canvas (холст).
Размещенное изображение

И начинаем писать…
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) - в большинстве случаев спред у ДЦ фиксированный, но мы оставим так как есть, на случай работы с брокером, у которого плавающий спред. Чем больше возможностей у программы, тем шире спектр применения.

И еще пару украшательств…
Изменим шрифт в нашей таблице – сделаем его жирным и увеличим размер:
Размещенное изображение

И наконец. Добавим событие onclick для нашего группового переключателя rgColor.
void __fastcall TForm1::rgColorClick(TObject *Sender)
{
 sgBidAsk->Invalidate();
}
Вызов этого метода перерисует нашу таблицу, когда мы будем переключаться между режимами. Без него, придется ждать перерисовки таблицы до появления новой котировки.
F9, смотрим…
Размещенное изображение

Самостоятельно:
- как обычно, делаем для других валютных пар.

Вложенные файлы


Правила Уоррена Баффета
1. Беречь деньги.
2. Помнить первое правило.

#17 sm1ke

sm1ke

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 174 сообщений

Опубликовано 09 Апрель 2010 - 11:02

Практическое занятие № 4.8. Приложение «в динамике».

«В динамике» не следует понимать буквально. Программу в динамик мы конечно запихивать не будем. Конечно, Вы догадались, что мы будем использовать динамическое создание объектов.

Правила Уоррена Баффета
1. Беречь деньги.
2. Помнить первое правило.

#18 PetrMFXV

PetrMFXV

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 183 сообщений

Опубликовано 11 Май 2010 - 11:17

И наконец. Добавим событие onclick для нашего группового переключателя rgColor.

void __fastcall TForm1::rgColorClick(TObject *Sender)
{
 sgBidAsk->Invalidate();
}
Вызов этого метода перерисует нашу таблицу, когда мы будем переключаться между режимами. Без него, придется ждать перерисовки таблицы до появления новой котировки.
F9, смотрим…

Если требуется немедленная перерисовка, то лучше использовать метод Update: sgBidAsk->Update(). Для таких компонентов как гриды(сетка) при полной перерисовке лучше вообще
использовать метод Refresh()(который вызовет Repaint, который в свою очередь вызовет Invalidate, а затем Update) и не мучиться.

#19 Yuira

Yuira

    пробегал

  • Пользователи
  • Pip
  • 1 сообщений

Опубликовано 03 Декабрь 2011 - 06:33

Здравствуйте, не знал куда обратиться, поэтому пишу сюда.
Нашел исходник History Analist у вас на сайте.
Просто она похожа на курсовую.
Возникла проблема:
1) когда загружаю базу в csv потом тыкаю расчет выводит ошибку и показывает на закрытый оператор, я не могу понять в чем проблема?
2) А когда другую базу устанавливал выводило ошибку с "8 is not valid integer value

Прошу помощи, курсач на неделе сдавать)

Вложенные превью

  • пример1.png
  • пример2.png
  • пример3.png


#20 Mr.Bags

Mr.Bags

    живет тут

  • Пользователи ST test (off)
  • PipPipPipPipPip
  • 142 сообщений

Опубликовано 12 Декабрь 2011 - 09:45

все просто- эта ошибка возникает в момент попытки преобразования текса в вещесвенное число. и приэтом в знак разделителя не совпадает с системным. надо поменять знак разделения дробной части и все заработает.
icq 336674712
skype fx_mr.bags

#21 pkapts

pkapts

    пробегал

  • Пользователи
  • Pip
  • 3 сообщений

Опубликовано 24 Июнь 2012 - 06:49

это какие-то поделки, а не обучение С++.
обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов.

#22 black_panther

black_panther

    пробегал

  • Пользователи
  • Pip
  • 4 сообщений

Опубликовано 23 Февраль 2016 - 08:40

это какие-то поделки, а не обучение С++.
обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов.

плюсую



#23 Павел Лихой

Павел Лихой

    прописался

  • Пользователь
  • PipPipPip
  • 61 сообщений

Опубликовано 30 Март 2016 - 03:50

 

это какие-то поделки, а не обучение С++.
обучение надо начинать с типов, разрешенных операций. Далее следует сказать про размещение объекта в памяти. Раз уж вы замахнулись на С++ то не мешает сказать о наследовании полиморфизме и вирутальных таблицах методов.

плюсую

 

Так вопрос не соответствует  названию темы. Тут вопрос технической поддержки, условно говоря, а название темы - начальное обучение. Но вообще интересно бы посмотреть. как и кто пишет роботов и прочие примочки для трейдинга.
Первый вопрос, а допускается ли такое? Есть стандарт или все эти терминалы МТ4 или  МТ5 являются закрытыми программами, без взаимодействия с расширениями и так далее.






Посетителей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных пользователей

Рейтинг брокеров форекс: кто лидер, кто аутсайдер и почему?




Masterforex-V NordFX

Rambler's Top100

Принимаем Z-Payment