Вверх ↑
Этот топик читают: Гость
Ответов: 3913
Рейтинг: 620
#46: 2013-05-22 13:05:45 ЛС | профиль | цитата
Да я тоже хотел бы, чтобы в каждом пакете можно было делать dll для перехвата событий схемы (добавление, удаление элементов и т.п.), событий компонентов (включение/выключение точек, изменение свойств и т.п.), при этом из этих dll иметь, как и из внешнего редактора формы и редакторов свойств, полный доступ ко всем свойствам любого компонента, в том числе привязанных менеджеров, с возможностью взаимосвязанных изменений нескольких свойств сразу у нескольких компонентов. Но это так, мечты...
карма: 19

0
Ответов: 4390
Рейтинг: 475
#47: 2013-05-22 18:30:24 ЛС | профиль | цитата
Netspirit, понятно, спасибо. Не знаю когда вернусь к этому правда(в FPC каспер вообще не даёт работать) а пока Синцылу прикручиваю.
карма: 4

0
Ответов: 953
Рейтинг: 34
#48: 2013-06-17 08:29:47 ЛС | профиль | цитата
Нужно было сделать поиск всех хендлов дочерних элементов главной формы, стандартной палитрой не додумался как, пришлось "рихтовать" элемент FindWindow. Теперь он версия 1.1
Добавлено свойство FindAll (игнорирует все другие свойства (ClassName, Caption и SkipParam) если true), и точки doStop, onEndEnum.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1findwindow1.1.rar [1.9KB] [133]
Ответов: 3913
Рейтинг: 620
#49: 2013-08-21 14:56:25 ЛС | профиль | цитата
Модификация компонента DataToFile (очередная)

Делал распаковщик TAR архивов - понадобилось считывать строку заданной длины.
Добавил два режима dtStringLen и dtLeadingString, свойства Count, TrailingStr.
Описание и сам распаковщик прилагаются.

Добавлен метод doSearch для поиска данных, добавлена верхняя точка Dt и прочее.
Пример поиска в файле прилагается. Поиск данных, отличных от String, недостаточно протестирован.

DataToFile mod 2-4

Редактировалось 1 раз(а), последний 2016-09-16 17:06:54
карма: 19

0
Ответов: 9810
Рейтинг: 340
#50: 2013-08-21 16:32:00 ЛС | профиль | цитата
Вот это, не очень корректно:


#pas
while st.Read(b, 1) = 1 do
begin
if b = _prop_TrailingStr[i + 1] then Inc(i) else i := 0;
Inc(k);
if i = c then break; // Найдено
// При ненахождении окончания в больших файлах поиск будет медленным -
// TODO: поставить ограничение на макс. длину.
end;
карма: 8

1
Голосовали:Netspirit
Ответов: 3913
Рейтинг: 620
#51: 2013-08-21 16:35:33 ЛС | профиль | цитата
Это как-бы самопальный алгоритм поиска. А что именно неправильно?
карма: 19

0
Ответов: 9810
Рейтинг: 340
#52: 2013-08-21 16:38:46 ЛС | профиль | цитата
Грубо говоря, в таком тексте: 'An><<end>'
-- не найдет концовку '<end>'
------------ Дoбавленo в 16.38:
об этом я как бы догадался
карма: 8

0
Ответов: 3913
Рейтинг: 620
#53: 2013-08-21 17:07:37 ЛС | профиль | цитата
Ага, и правда. Думаю...
------------ Дoбавленo в 17.07:
Так, вроде, будет нормально?


#pas
while st.Read(b, 1) = 1 do
begin
if b = _prop_TrailingStr[i + 1] then Inc(i)
else
if (i > 0) and (b <> _prop_TrailingStr[i]) then Dec(i);
Inc(k);
if i = c then break;
end;
карма: 19

0
Ответов: 9810
Рейтинг: 340
#54: 2013-08-21 18:50:47 ЛС | профиль | цитата
Кажется, что нет.....

Тут примерно так: если по тупому, то "при несовпадении" надо обязательно откатываться по файлу назад до "после самого первого совпадения"
А если очень важно каждый символ файла читать только один раз, тогда без КМП-алгоритмов не обойтись.
((Алгоритм Кнута-Морриса-Пратта -- сюда и копать))
------------ Дoбавленo в 18.50:
А если на чистоту, то в очень глубокий Дзэн я не погружался
В большей степени - просто не поверил, что ты за 40 минут уделал классиков
Будешь настаивать - конечно же будем думать еще раз. Либо найдем "контраргумент", либо размажем их фэйсом об тэйбл

Редактировалось 1 раз(а), последний 2016-10-31 16:33:05
карма: 8

0
Ответов: 3913
Рейтинг: 620
#55: 2013-08-21 19:12:57 ЛС | профиль | цитата
А я не настаиваю Уже ищу непробиваемый алгоритм. Потом же его можно будет встроить куда-нибудь как "SearchInStream".
карма: 19

0
Ответов: 953
Рейтинг: 34
#56: 2013-08-22 12:14:51 ЛС | профиль | цитата
Модифицировал компонент SendMessage добавив возможность регистрации нового сообщения для возможности посылки произвольных сообщений окнам. Если поле NewMessage не пусто - то игнорируется значение поля Message и регистрируется сообщение с указанным в NewMessage именем. Если регистрация не удалась - выдает ошибку на точку onSend. Добавил свойство PostMessage. Обновил вложение.

Все это потребовалось чтобы посылать сообщения торговому терминалу:
http://forum.mql4.com/12970
Все работает.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1sendmessage.rar [1.2KB] [175]
Разработчик
Ответов: 25459
Рейтинг: 2070
#57: 2013-08-22 12:39:40 ЛС | профиль | цитата
Aziz писал(а):
Все это потребовалось чтобы посылать сообщения торговому терминалу

Вообще-то, там применяется PostMessage, а не SendMessage. PostMessage не ждет ответ окончания выполнения посылки сообщения, а ставит его в очередь сообщений и отдает управление программе. Критично ли это для получения результата, я не в курсе, так, инфа к размышлению
карма: 19

0
Ответов: 953
Рейтинг: 34
#58: 2013-08-22 13:34:34 ЛС | профиль | цитата
Действительно, проглядел. Спасибо. Хоть работает, но надо добавить булевое свойство для PostMessage.
------------ Дoбавленo в 13.34:
Обновил вложение.
sendmessage.rar
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3913
Рейтинг: 620
#59: 2013-08-22 18:12:40 ЛС | профиль | цитата
Ну, что, пробуем новую версию DataToFile? В том же посте. Много чего добавлено/изменено, надо бы потестировать.
[offtop]PS: в файлах до 4 Гб - ищет.[/offtop]
карма: 19

0
Ответов: 953
Рейтинг: 34
#60: 2013-08-27 03:33:41 ЛС | профиль | цитата
Добавлена точка doFrequency в trackbarrush чтобы менять частоту рисок динамически зависимости от значения свойства Max чтобы при его больших значениях они не сливались.
Не мешало бы и обычный трекбар переделать также.
Схема применения:

code_31676.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 2trackbarrush_dofrequency-mod.rar [8.6KB] [123], code_31676.txt [763B] [149]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)