Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» прикладное программирование и не только оно...

Автор: XPerformer
Дата сообщения: 06.02.2015 20:00
Кто не видел, рекомендую:

Цитата:
Я программист не дизайнер... 
Делаю на заказ доску объявлений, заказчика предупредил, что я программист а не дизайнер... но он настоял, чтобы я нарисовал дизайн иконок для наглядности

http://pikabu.ru/story/ya_programmist_ne_dizayner_3055241
Судя по тенденциям в вебдизайне, скоро все сайты будут такими
Автор: HNKTO
Дата сообщения: 11.02.2015 20:21
О да.
А с тенденциями в вебпрограммировании всё это ещё и работать будет прям как на той картинке нарисовано
Автор: asutp2
Дата сообщения: 16.02.2015 11:09
Это точно))))))
Автор: dix75
Дата сообщения: 18.02.2015 14:34

Цитата:
Судя по тенденциям в вебдизайне, скоро все сайты будут такими

Это ерунда.
Я тоже программист, а не дизайнер и что.
Есть CSS либы, готовые шаблоны.
Хотябы взяnm bootstrap
Автор: dimonadv
Дата сообщения: 04.03.2015 14:32

Цитата:
То-есть, теоретически мне может быть выгоднее расположить свою систему на амазоне, не покупая Оракл за полную цену?

А как не дешево "содержать" Оракл после покупки))
Тех.поддержка для проекта где нет кластеров и прочих "бигудей" может и не так актуальна, но столько косяков вылазит и при девелопменте и продакшене, что поверьте - реквесты в сапорте по месяцу иногда сам Оракл не может закрыть.

Добавлено:

Цитата:
http://pikabu.ru/story/ya_programmist_ne_dizayner_3055241
Судя по тенденциям в вебдизайне, скоро все сайты будут такими


Вполне возможно что данные иконки в "современных студиях арт дизайна" могли бы заказчику и за хорошие деньги впарить, если бы они вписывались в стилистику сайта)
Автор: alexVS
Дата сообщения: 05.03.2015 14:18
Подскажите пожалуйста. Что-то я совсем запутался в этих комптляторах С++.

Стоят системы Winodws XP x32, Windows 7 x64 (на ноуте).

Пишу простенькие консольные программы на С++ в IDE DevC++ или CodeBlocks. Компилятор mingGW gcc, g++. Тут вроде все ясно.

Для создания простеньких программ Windows forms использую Borland C++ Builder 6 Portable. Если в настройках проекта снять несколько галок, то можно получить программу, не требующую .NET и Microsoft Visual C++ runtime.

Есть ли более современная среда, аналогичная Borland C++ Builder 6? Не требующая .NET. Для разработки простеньких программ под Windows? У меня программки, к примеру одно окно с несколькими кнопками, Editboxами, чтение из файла, запись в файл. И всё.

MS Visual Studio 2010 ставил. Размер огромный. С трудом запустилась. Программы Windows Forms нужно писать на языке CLI. И они не всегда идут на других ПК, даже если там установлены все библиотеки MS Visual C++ runtime.
Автор: akaGM
Дата сообщения: 05.03.2015 18:27
у меня window C++ 2010 Express
с родного сайта...
Автор: landy
Дата сообщения: 06.03.2015 12:19

Цитата:
Есть ли более современная среда, аналогичная Borland C++ Builder 6? Не требующая .NET.

Вообще-то, C++ Builder вполне себе продолжает развиваться - выбирай любую редакцию. Если тебя устраивает 6 версия - её вполне можно использовать и под вин7.
Автор: NeoAnomaly
Дата сообщения: 10.03.2015 00:08

Цитата:
Есть ли более современная среда, аналогичная Borland C++ Builder 6? Не требующая .NET.  

А что понимается под более современной, точнее какие требования, что не устраивает в билдере?
Вариантов получить программу, не требующую дополнительных библиотек - куча. Но на другой чаше весов оказывается удобство и скорость разработки.

Про студию & Windows Forms вообще не понял. Если привязываться к .Net, то да - CLI. Но есть же ещё всякие MFC, Qt и другой натив. Но как с IDE с ней сложно спорить, на мой взгляд )
Автор: ziesto
Дата сообщения: 12.03.2015 13:02

Цитата:
Есть ли более современная среда, аналогичная Borland C++ Builder 6? Не требующая .NET.  

А чем Embarcadero XE не подходят?
Автор: HNKTO
Дата сообщения: 13.04.2015 14:29
Кому интересно:
Я таки перевёл ту статью с flipcode по поводу наложения шкурок на окна и делания последних непрямоугольной формы. ИМХО написано понятней чем варианты отечественных авторов. Хотя примеры организации базовой структуры приложения (из примеров кода к статье) лучше не брать как основу для повторения.
А в комментариях к ней есть ещё по поводу полупрозрачности для систем Win2000+
качать: http://rghost.ru/8rDg5x9vB
Единственное, что там не рассмотрено - как менять гм. что-ли темы оформления окон.
(хотя сам сталкивался с таким всего раз на примере программы BSplayer, которая меняет стилистику включительно стандартных окон системы, если последние открыты через этот проигрыватель)
Автор: ptr73
Дата сообщения: 22.04.2015 08:10
alexVS
Embarcadero XE и MS Visual Studio
а то, что у тебя программа на других компьютерах не запустилась, то это твоя ошибка, а не компилятора
ищи, какой библиотеки или настройки ей не хватило
Автор: protoror
Дата сообщения: 22.04.2015 22:54
alexVS
+1 за Embarcadero XE8, сам пишу каталоги, один exe и без всяких бубнов, все ресурсы в нем.
Автор: saidumar
Дата сообщения: 23.04.2015 10:04
alexVS
Если комп не очень то ХЕ2, если совсем слабенький смотри в сторону Сибилдера, сам до сих пор для мелких задач использую delphi 7...
Автор: doxtur
Дата сообщения: 16.05.2015 01:13
раньше использовал виртуалки - когда писал консольно/с легкими IDE, а сейчас так не получается с Delphi XE8 и разработкой под Винды/iOS - слишком тяжело виртуалить MacOS, поэтому купил Macbook Air, но к сожалению с 4 гигами оперативы так что на нем особо не повиртуалишь ) в итоге пишу на десктопе, Air только для сборки и запуска на iOS
Автор: xpin2013
Дата сообщения: 14.07.2015 06:01
тут недавно читаю следующий бред наших, так сказать официальных представителей в разделе веб программирование. (удивляюсь чему их учат).

"так как фирма Семантекс имеет некоторое отношение к Ораклу и Джаве, то в тылы PL следует отдать какого нибудь макрософщика, дабы укрепиться с Ораклами в дружбаны".

и ведь такое серьёзные люди пишут. а потом не менее, а скорее более менее серьёзные люди читают.

Добавлено:
забыл добавить,
конечно может оно в угоду кризису, но последнее время слово инфраструктура на языке уже мозоль протирает. чуть что, на неё (на инфраструктуру) ...
Автор: Skif_off
Дата сообщения: 29.08.2015 03:07
Подскажите, пожалуйста, где можно задать небольшойтвопрос по Lazarus?
[more=Если прямо здесь можно:]
есть код

Код: ShellExecute();
sleep(2000);
SetWindowPos();
Автор: SuPriTo
Дата сообщения: 29.08.2015 10:23
Skif_off
Какое приложение запускаешь?
Можно например воспользоваться event, если приложение, которое запускаешь сам пишешь.
Автор: Skif_off
Дата сообщения: 29.08.2015 11:30
SuPriTo
Плагин AmpView запускает свой плеер AmpView.exe, задержка раздражает, а когда у автора будет время - пока не известно.
Строки 83-90 в исходниках.
Немного пишу на AutoIt, сделал бы аналогично while...do, но не знаю, допустимо ли.
Автор: SuPriTo
Дата сообщения: 29.08.2015 12:49
Skif_off
Почитай тут _http://articles.org.ru/cn/showdetail.php?cid=8673
В общем можно попробовать CreateProcess и WaitForInputIdle

Цитата:
Немного пишу на AutoIt, сделал бы аналогично while...do, но не знаю, допустимо ли.

Можно сделать через while, но если что-то пойдет не так, то приложение зависнет.
Надо дополнительные условия вставлять, например цикл выполнять не более 2 сек.
Автор: Skif_off
Дата сообщения: 29.08.2015 13:47
SuPriTo

Цитата:
В общем можно попробовать CreateProcess и WaitForInputIdle

Тогда запуск и скрытие окна должно быть сделано как-то так?

Код: var Rlst: LongBool;
Rlst := CreateProcess(PlayerExe, FileToLoad, nil, nil, 0, nil, nil, StartUpInfo, ProcessInfo);
if Rlst then
with ProcessInfo do begin
WaitForInputIdle(hProcess, INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess);
end
end;
SetWindowPos(ParentWin, 0, -100, -100, 0, 0, SWP_HIDEWINDOW);
Автор: SuPriTo
Дата сообщения: 29.08.2015 19:22
Skif_off
Про CreatePRocess читай тут _https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx
_http://www.gunsmoker.ru/2009/07/createprocess.html

Цитата:
Только не понял, какие флаги автор использовал в ShellExecute(): SW_SHOWNOACTIVATE + SW_SHOWNORMAL (4 + 1) или SW_SHOW (5)? Есть ещё SW_HIDE (0). И как их добавить?

StartupInfo.wShowWindow - возможно это.

Цитата:
Rlst нужно объявить вместе с остальными переменными в начале функции?

Да надо

Цитата:
WaitForInputIdle(hProcess, INFINITE);

Вместо INFINITE возможно стоит попробовать 2000 (2 сек). Если вышло с Timeout - то выходить с ошибкой

Цитата:
Таймер не осилю и, наверное, это будет дольше.

Он проще чем кажется
Автор: Skif_off
Дата сообщения: 29.08.2015 22:12
SuPriTo

Цитата:
Он проще чем кажется

Прогнал, подумал - подобно AutoIt

Код: $timer = TimerInit()
...
$time = TimerDiff($timer)
Автор: SuPriTo
Дата сообщения: 30.08.2015 13:09

Цитата:
В чём может быть проблема?


Цитата:
Rlst:=CreateProcess(PChar(PlayerExe), PChar('\n "'+FileToLoad+'"'), nil, nil, true, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);


Цитата:
PChar('\n "'+FileToLoad+'"')

Во втором параметре функции CreateProcess. Я давал ссылки на особенности использования CreateProcess почитай.
PlayerExe := PlugDir+'\AmpView.exe';
Params := '\n "'+FileToLoad+'"';
CmdLine := Format('"%s" %s', [PlayerExe, Params]);
CreateProcess(PChar(PlayerExe), PChar(CmdLine), ...);
Видимо как-то так.
Да и функция запускает новый процесс каждый раз.
Можно воспользоваться функцией ShellExecuteEx. Так вообще проще.
В SellExec.Mask := SEE_MASK_NOASYNC - функция будет ждать пока не запустится приложение и поэтому функция sleep не понадобиться.
Тут хорошо все написано _http://www.gunsmoker.ru/2015/01/never-use-ShellExecute.html
Автор: Skif_off
Дата сообщения: 30.08.2015 14:00
SuPriTo
Спасибо за помощь, получилось, но всё-таки решил вернуть ShellExecute и добавить while...do, т.к. параметры CreateProcess (кроме lpApplicationName и lpCommandLine) для меня не так очевидны, не хочу напортачить и вообще - чем проще, тем лучше Получилось так:

Код: var
...
st: integer;
...
1: begin
ShellExecute(0, nil, PChar(PlayerExe), PChar('\n "'+FileToLoad+'"'), nil, 5);// <> 0 then
//sleep(2000); // ждём, пока AmpView откроет файл
st:=GetTickCount();
while (GetTickCount() - st < 2000) and (FindWindow('TAmpViewMainForm', nil) = 0) do
Sleep(10);
SetWindowPos(ParentWin, 0, -100, -100, 0, 0, SWP_HIDEWINDOW);
Result := CallKiller(ParentWin);
if Result = 0 then Exit;

end;
Автор: Forumman
Дата сообщения: 03.09.2015 18:23
Ребят, нужна ваша помощь. Кто хорошо разбирается в коде, нужно чтоб посмотрели функции и операторы, не допущено ли здесь ошибок. Это язык прокраммирования MQL4. Используется в торговом терминале MetaTrader (4) MetaQuotes Software Corp. Слыхал, что этот язык очень схож с С++ и ему подобными. В файле который хочу чтоб вы помогли "прогнать" на ошибки в коде, реализована нестандартная возможность конвертации временных периодов, а именно - конвертация таймфрейма (временного периода) MN (месяц) в период кратный 2, 3, 4, 6, 12 месяцев. При этом, автономно (открыть автономно) нужно открывать минутные графики с указанным периодом, это из-за особенностей самой программы (MetaTrader (4) - а может, можно сделать в коде так, чтоб можно было открывать не М6 чтоб увидеть график соотв. MN6, а чтоб сразу можно было автономно открывать MN6?)), потому что в этой программе, вроде бы, не реализована конвертация стандартными методами месячных графиков, в графики больше 1 месяца. Может, умельцы могут доработать и убрать ошибки (если таковые имеются здесь в коде)? Потому что скрипт работает, но ощущается что есть "сырость" в коде, расстановка символов, много "воды" (или это мне так кажется?). Помогите, пожалуйста, разобрать этот код и упростить/исправить, где это возможно. [more=Вот код файла:]//+------------------------------------------------------------------+
//| Period_Converter_MN.mq4|
//| Copyright ?2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//| Modified by wfy05@talkforex based on Period_Converter|
//| http://www.talkforex.com |
//+------------------------------------------------------------------+
//| Конвертер периодов больше месяца. Не панацея, но.. |
//| - кратность 2 3 4 6 12 |
//| - ищем в соответственных минутках |
//+------------------------------------------------------------------+
#property copyright "Shu"
#property link "http://SovetnikShu.ru"
//----
#property indicator_chart_window
#property show_inputs
//----
#include <WinUser32.mqh>
/*
Readme:

I. Features:
This is an improved version of period converter for MT4 based on the
MT4's default period converter by metaquotes.
The default period converter script do not support real-time refreshing,
and consume lots of CPU (50%-9x%) making the whole system slow.
Also, the default one is a script which do not save when you exit MT4,
so you have to apply every converter script again after restarting, quite
annoying.

This one fixed all above problems:
1. Real-time updating or custom interval millisecond level updating.
2. Low CPU cost, average 5%-10% or less.
3. Works as an indicator, so can be saved and reloaded during restart.
4. There is no one converter per chart limitation as it is not script
any more, you can only use one window as source to generate as many
new timeframe chart as possible.
5. Auto updating if there is new history block loaded.

II. How to use:
Copy the mq4 file to your MT4 indicators folder (experts\indicators)
to install it as an indicator, NOT script. then in the custom indicator
list, attach period_converter_opt to the chart you want.
It support 4 parameters:
PeriodMultiplier: new period multiplier factor, default is 2
UpdateInterval: update interval in milliseconds,
zero means update real-time. default is zero.
Enabled: You can disable it without remove it with this option.

Other parameters are comments or for debugging, it is safe to ignore them.

Also Make sure you have Allow Dll imports option checked in common tab or
it won't work

After that, File->Open Offline to open the generated offline data. then
the offline data will be updated automatically.

As long as you keep the source chart open and the converter indicator
running, the generated chart including indicators inside will always
be updated. also you can close the generated chart and open again
later from File->Open Offline without problem.

If you want to quit MT4, you can leave those offline chart as other
normal online charts. when you start MT4 next time, those charts will
also be loaded and updated.


III. Notes:
1. Do NOT uncheck the "offline chart" option in offline chart common properties.
or after MT4 restart, it will treat that chart as online chart and request
the data from server, resulting empty chart window.
2. You can attach more than one converter to same window with different
PeriodMultiplier, e.g: you can attach 3 converter with
PeriodMultiplier = 2, 4, 10 to M1 to generate M2, M4, M10 at the same time.
It is even ok to use the M1 chart to generate Hourly chart like H2, which
only cost a few more CPU resource during initial conversion. but usually
most server don't have much data for those short period. resulting the
generated data isn't long enough for long period. so it is suggested
to use Hourly/Daily charts as source when needed.
3. The real-time updating mode updates quotes as fast as possible, but as
this is done via script, and MT will skip calling start() function when
your PC is busy and lots of quotes income. anyway, this seldom happen,
and you can at least get 10 updates each seconds which is much more
than enough.
4. The offline chart don't have a bid line showing in chart, but all data
in the chart including the indicators is still being updated,
so don't worry. you can show the bid line by unclick the "offline chart"
option in chart properties. but which don't helps much and if you forget
to check "offline chart" option before exit. it will cause errors and
become empty on next startup. you have to close the window and open
again from File->Open offline, which don't worth the trouble.

IV. History:
2005.12.24 1.4 faster to detect if data changed by removing float point
operations, added support to output CSV file in real time.
OutputCSVFile = 0 means no CSV.
OutputCSVFile = 1 means CSV + HST
OutputCSVFile = 2 CSV only, no HST .
(useful if you want to generate CSV for builtin periods)
CSV Filename will be the same as HST file except the extension.
added safe checking for PeriodMultiplier.
2005.12.04 1.3 Fixed missing data when there is large amount of data
loaded in several blocks, and support auto updating
when new history is loaded.
2005.11.29 1.2 Additional fix for missing data and server changing.
2005.11.29 1.1 Fixed missing partial data after restart.
Reinitialize after changing server or data corrupted.
2005.11.28 1.0 Initial release
*/
//----
extern double Version=1.4; // code version
extern string BuildInfo="2008.08.21 by Shu";
extern int PeriodMultiplier=2; // new period multiplier factor
extern int OutputCSVFile =1; // also output CSV file?
extern int UpdateInterval =0; // update interval in milliseconds, zero means update real-time.
extern bool Enabled=true;
extern bool Debug=false;
//----
int FileHandle=-1;
int CSVHandle=-1;
int NewPeriod =0;
//----
#define OUTPUT_HST_ONLY 0
#define OUTPUT_CSV_HST 1
#define OUTPUT_CSV_ONLY 2
#define CHART_CMD_UPDATE_DATA 33324
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DebugMsg(string msg)
{
if (Debug) Alert(msg);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
//safe checking for PeriodMultiplier.
if (PeriodMultiplier<=1)
{
//only output CSV file
PeriodMultiplier=1;
OutputCSVFile=2;
}
NewPeriod=Period() * PeriodMultiplier;
if (OpenHistoryFile() < 0) return(-1);
WriteHistoryHeader();
UpdateHistoryFile(Bars-1, true);
UpdateChartWindow();
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void deinit()
{
//Close file handle
if(FileHandle>= 0)
{
FileClose(FileHandle);
FileHandle=-1;
}
if (CSVHandle>=0)
{
FileClose(CSVHandle);
CSVHandle=-1;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OpenHistoryFile()
{
string name;
//----
name=Symbol() + PeriodMultiplier; // *** Shu
if (OutputCSVFile!=OUTPUT_CSV_ONLY)
{
FileHandle=FileOpenHistory(name + ".hst", FILE_BIN|FILE_WRITE);
if (FileHandle < 0) return(-1);
}
if (OutputCSVFile!=OUTPUT_HST_ONLY)
{
CSVHandle=FileOpen(name + ".csv", FILE_CSV|FILE_WRITE, ',');
if (CSVHandle < 0) return(-1);
}
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int WriteHistoryHeader()
{
string c_copyright;
int i_digits=Digits;
int i_unused[13]={0};
int version=400;
//----
if (FileHandle < 0) return(-1);
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
FileWriteInteger(FileHandle, version, LONG_VALUE);
FileWriteString(FileHandle, c_copyright, 64);
FileWriteString(FileHandle, Symbol(), 12);
FileWriteInteger(FileHandle, PeriodMultiplier, LONG_VALUE);
FileWriteInteger(FileHandle, i_digits, LONG_VALUE);
FileWriteInteger(FileHandle, 0, LONG_VALUE); //timesign
FileWriteInteger(FileHandle, 0, LONG_VALUE); //last_sync
FileWriteArray(FileHandle, i_unused, 0, ArraySize(i_unused));
return(0);
}
static double d_open, d_low, d_high, d_close, d_volume;
static int i_time;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void WriteHistoryData()
{
if (FileHandle>=0)
{
FileWriteInteger(FileHandle, i_time, LONG_VALUE);
FileWriteDouble(FileHandle, d_open, DOUBLE_VALUE);
FileWriteDouble(FileHandle, d_low, DOUBLE_VALUE);
FileWriteDouble(FileHandle, d_high, DOUBLE_VALUE);
FileWriteDouble(FileHandle, d_close, DOUBLE_VALUE);
FileWriteDouble(FileHandle, d_volume, DOUBLE_VALUE);
}
if (CSVHandle>=0)
{
int i_digits=Digits;
//----
FileWrite(CSVHandle,
TimeToStr(i_time, TIME_DATE),
TimeToStr(i_time, TIME_MINUTES),
DoubleToStr(d_open, i_digits),
DoubleToStr(d_high, i_digits),
DoubleToStr(d_low, i_digits),
DoubleToStr(d_close, i_digits),
d_volume);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int UpdateHistoryFile(int start_pos, bool init=false)
{
static int last_fpos, csv_fpos;
int i, ps;
//----
ps=Period() * PeriodMultiplier * 60;
i_time=tt(Time[start_pos]);
//----
if (init)
{
//first time, init data
d_open=Open[start_pos];
d_low=Low[start_pos];
d_high=High[start_pos];
d_close=Close[start_pos];
d_volume=Volume[start_pos];
i=start_pos - 1;
if (FileHandle>=0) last_fpos=FileTell(FileHandle);
if (CSVHandle>=0) csv_fpos=FileTell(CSVHandle);
}
else
{
i=start_pos;
if (FileHandle>=0) FileSeek(FileHandle,last_fpos,SEEK_SET);
if (CSVHandle>=0) FileSeek(CSVHandle, csv_fpos, SEEK_SET);
}
if (i < 0) return(-1);
//----d
int cnt=0;
int LastBarTime;
//processing bars
while(i>=0)
{
LastBarTime=Time[i];
//a new bar
if (LastBarTime>= i_time + ps)
{
//write the bar data
WriteHistoryData();
cnt++;
i_time=tt(LastBarTime);
d_open=Open[i];
d_low=Low[i];
d_high=High[i];
d_close=Close[i];
d_volume=Volume[i];
}
else
{
//no new bar
d_volume+= Volume[i];
if (Low[i]<d_low) d_low=Low[i];
if (High[i]>d_high) d_high=High[i];
d_close=Close[i];
}
i--;
}
//record last_fpos before writing last bar.
if (FileHandle>=0) last_fpos=FileTell(FileHandle);
if (CSVHandle>=0) csv_fpos=FileTell(CSVHandle);
//----
WriteHistoryData();
cnt++;
d_volume-= Volume[0];
//flush the data writen
if (FileHandle>=0) FileFlush(FileHandle);
if (CSVHandle>=0) FileFlush(CSVHandle);
return(cnt);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int UpdateChartWindow()
{
static int hwnd=0;
//----
if (FileHandle < 0)
{
//no HST file opened, no need updating.
return(-1);
}
if(hwnd==0)
{
//trying to detect the chart window for updating
hwnd=WindowHandle(Symbol(), PeriodMultiplier);
}
if(hwnd!= 0)
{
if (IsDllsAllowed()==false)
{
//DLL calls must be allowed
DebugMsg("Dll calls must be allowed");
return(-1);
}
if (PostMessageA(hwnd,WM_COMMAND,CHART_CMD_UPDATE_DATA,0)==0)
{
//PostMessage failed, chart window closed
hwnd=0;
}
else
{
//PostMessage succeed
return(0);
}
}
//window not found or PostMessage failed
return(-1);
}
/*
int PerfCheck(bool Start)
{
static int StartTime = 0;
static int Index = 0;
if (Start)
{
StartTime = GetTickCount();
Index = 0;
return (StartTime);
}
Index++;
int diff = GetTickCount() - StartTime;
Alert("Time used [" + Index + "]: " + diff);
StartTime = GetTickCount();
return (diff);
}
*/
//-----
static int LastStartTime=0;
static int LastEndTime=0;
static int LastBarCount=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int reinit()
{
deinit();
init();
LastStartTime=Time[Bars-1];
LastEndTime=Time[0];
LastBarCount=Bars;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool IsDataChanged()
{
/*
static int LastBars = 0, LastTime = 0, LastVolume = 0;
static double LastOpen = 0, LastClose = 0, LastHigh = 0, LastLow = 0;

if (LastVolume != Volume[0] || LastBars != Bars || LastTime != Time[0]||
LastClose != Close[0] || LastHigh != High[0] || LastLow != Low[0] ||
LastOpen != Open[0])
{
LastBars = Bars;
LastVolume = Volume[0];
LastTime = Time[0];
LastClose = Close[0];
LastHigh = High[0];
LastLow = Low[0];
LastOpen = Open[0];
return (true);
}
return (false);
*/
/*
fast version without float point operation
*/
static int LastBars=0, LastTime=0, LastVolume=0;
bool ret;
//----
ret=false;
if (LastVolume!=Volume[0])
{
LastVolume=Volume[0];
ret=true;
}
if (LastTime!=Time[0])
{
LastTime=Time[0];
ret=true;
}
if (LastBars!=Bars)
{
LastBars=Bars;
ret=true;
}
return(ret);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CheckNewData()
{
static string LastServer="";
//----
if (Bars < 2)
{
//the data is not loaded yet.
DebugMsg("Data not loaded, only " + Bars + " Bars");
return(-1);
}
string serv=ServerAddress();
if (serv=="")
{
//no server yet
DebugMsg("No server connected");
return(-1);
}
//server changed? check this and reinit to prevent wrong data while changing server.
if (LastServer!=serv)
{
DebugMsg("Server changed from " + LastServer + " to " + serv);
LastServer=serv;
reinit();
return(-1);
}
if (!IsDataChanged())
{
//return if no data changed to save resource
//DebugMsg("No data changed");
return(-1);
}
if (Time[Bars-1]!=LastStartTime)
{
DebugMsg("Start time changed, new history loaded or server changed");
reinit();
return(-1);
}
int i, cnt;
//try to find LastEndTime bar, which should be Time[0] or Time[1] usually,
//so the operation is fast
for(i=0; i < Bars; i++)
{
if (Time[i]<=LastEndTime)
{
break;
}
}
if (i>=Bars || Time[i]!=LastEndTime)
{
DebugMsg("End time " + TimeToStr(LastEndTime) + " not found");
reinit();
return(-1);
}
cnt=Bars - i;
if (cnt!=LastBarCount)
{
DebugMsg("Data loaded, cnt is " + cnt + " LastBarCount is " + LastBarCount);
reinit();
return(-1);
}
//no new data loaded, return with LastEndTime position.
LastBarCount=Bars;
LastEndTime=Time[0];
return(i);
}
//+------------------------------------------------------------------+
//| program start function |
//+------------------------------------------------------------------+
int start()
{
static int last_time=0;
//----
if (!Enabled) return(0);
if (Period()!=PERIOD_MN1) return; // тока для месицыв работаем!
//----
switch(PeriodMultiplier)
{
case 2:
case 3:
case 4:
case 6:
case 12:
break;
default: return;
break;
}
//always update or update only after certain interval
if (UpdateInterval!= 0)
{
int cur_time;
//----
cur_time=GetTickCount();
if (MathAbs(cur_time - last_time) < UpdateInterval)
{
return(0);
}
last_time=cur_time;
}
//if (Debug) PerfCheck(true);
int n=CheckNewData();
//if (Debug) PerfCheck(false);
if (n < 0) return(0);
//update history file with new data
UpdateHistoryFile(n);
//refresh chart window
UpdateChartWindow();
//if (Debug) PerfCheck(false);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime tt(datetime dt)
{
datetime r;
int m, y;
//----
m=TimeMonth(dt);
y=TimeYear (dt);
m=m/PeriodMultiplier;
m=m * PeriodMultiplier + 1;
r=StrToTime(DoubleToStr(y,0) + "." + DoubleToStr(m,0) + "." + "01");
Comment(TimeToStr(r));
//----
return(r);
}
//+------------------------------------------------------------------+[/more]
Посмотрите где есть блоки и функции которые можно упростить/заменить на более верное решение. Можно проверить в MetaEditor'е - это программа которая поставляется в комплекте с торговым терминалом MetaTrader. Скачивается на сайте MetaQuotes Software. Не я один буду рад, если поможете улучшить/исправить этот программный код. Очень полезная "примочка" для программы, которая поможет анализировать японские свечи выше 1 месяца на графиках в торговой программе MetaTrader 4. Спасибо за возможную помощь! Удачи и успеха!
Автор: vitektm
Дата сообщения: 10.09.2015 15:05
Парни и девчонки пишу программку на с++ но опыта немного.
Поэтому кому интересно прошу влиться в проект а возможно и возглавить.

Суть программы добавить немного функционала ОС версий PRO в версию HOME.
В частности запрет на запуск программ.

Есть программа PRGWALL написанная нашим соотечественником, автор на связь не вышел, а есть удеи по ее усовершенствованию.

Суть PRGWALL при запуске программы выдается запрос на запуск запрет программы.
Ну решение можно запомнить. Оригинал воспринимает только путь до программы.
Я же хочу развить идею учитывать хеш файла, издателя, или задать путь до каталога.
Скажем запретить запуск из appdata, отправлять хеш на сайт вирустотал ну и другие идеи.

По сути программа "микроантивирус", свою я назвал ExeFirewall (Что больше отражает её суть).
Если у кого есть время и опыт то можно и написать и на C#. да на чем угодно главное чтобы работало шустро.
Автор: DonDD
Дата сообщения: 15.09.2015 10:21
Внимание!
URLCollector (бесплатный аналог URL-Album) ищет Delphi программистов, готовых безвозмездно продолжить развитие некоммерческого проекта.
Автор: protoror
Дата сообщения: 13.10.2015 17:50

Цитата:
бесплатный аналог URL-Album

неужто еще кто-то этим пользуется?
сам забил на ссылки, т.к. через год два уже все кардинально меняется и былой инфы уже нет.
Автор: XPerformer
Дата сообщения: 13.10.2015 19:38
protoror
это как раз раньше так было
А сейчас все устаканилось, и новые стоящие сайты не появляются
Даже домашняя страница Васей Пупкиных перекочевала вконтакт

Страницы: 12345678910111213141516171819202122232425262728293031

Предыдущая тема: Borland Developer Studio 2006 и Oracle пакеты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.