Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
А вы, батенька, как думали? Уж пора бы давно было понять, что тут как только сделал, что-то в плане плагина, как сразу "заказы" пойдут. Расслабляться не советую, а вот стойкость вырабатывать придеться.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
А вы, батенька, как думали? Уж пора бы давно было понять, что тут как только сделал, что-то в плане плагина, как сразу "заказы" пойдут. Расслабляться не советую, а вот стойкость вырабатывать придеться.
Вырабатываю, но с трудом... У меня опять возникли затыки с которымя без помщи я стравиться не могу.
1. Затык и непонятка. Почему вот такой код не работает, я ведь из него всего одну переменную удалил:
procedure DoSNTPDate (AHost : string; var AData1 : string) ; var SNTP: TIdSNTP; temp: TIdSNTP; slDateTime: TStringList; begin SNTP := TIdSNTP.Create(temp); slDateTime := TStringList.Create;
if AHost = ''then SNTP.Host := 'ntp1.stratum1.ru' else SNTP.Host := AHost; try if SNTP.SyncTime then begin slDateTime.Delimiter:= ' '; slDateTime.DelimitedText:= DateTimeToStr(SNTP.DateTime); AData1:= slDateTime[0]; end; except begin AData1:= 'Error'; end; end; end;
function GetDate (AHost, AVar1 : PChar) : Boolean; var AData1 : string; begin Result:= False; DoSNTPDate (string(AHost), AData1); If StrPas(AVar1) <> ''then nbSetVar (PChar(AVar1), PChar(AData1)); Result:= True; end;
function EditGetDate (var AHost, AVar1 : PChar) : Boolean; begin Result:= False; NTPDateForm:= TNTPDateForm.Create(Application); with NTPDateForm do try edt1.Text := AHost; edt2.Text := AVar1; if ShowModal = mrOk then begin SetStr(AHost, edt1.Text); SetStr(AVar1, edt2.Text); Result := True; end; finally Free; end; end;[/color]
А вот такой код работает... Я понять не могу? накой черт процедуре обязательно требуется переменная AData2:
procedure DoSNTPDate (AHost : string; var AData1 : string; var AData2 : string) ; var SNTP: TIdSNTP; temp: TIdSNTP; slDateTime: TStringList; begin SNTP := TIdSNTP.Create(temp); slDateTime := TStringList.Create;
if AHost = ''then SNTP.Host := 'ntp1.stratum1.ru' else SNTP.Host := AHost; try if SNTP.SyncTime then begin slDateTime.Delimiter:= ' '; slDateTime.DelimitedText:= DateTimeToStr(SNTP.DateTime); AData1:= slDateTime[0]; end; except begin AData1:= 'Error'; end; end; end;
function GetDate (AHost, AVar1 : PChar) : Boolean; var AData1, AData2 : string; begin Result:= False; DoSNTPDate (string(AHost), AData1, AData2); If StrPas(AVar1) <> ''then nbSetVar (PChar(AVar1), PChar(AData1)); Result:= True; end;
function EditGetDate (var AHost, AVar1 : PChar) : Boolean; begin Result:= False; NTPDateForm:= TNTPDateForm.Create(Application); with NTPDateForm do try edt1.Text := AHost; edt2.Text := AVar1; if ShowModal = mrOk then begin SetStr(AHost, edt1.Text); SetStr(AVar1, edt2.Text); Result := True; end; finally Free; end; end;[/color]
2. Проблема. Почему если я пытаюсь объединить несколько строковых переменных в одну. В плагине я получаю ошибку.
procedure DoSNTPDate (AHost : string; var AData1 : string; var AData2 : string) ; var SNTP: TIdSNTP; temp: TIdSNTP; slDateTime: TStringList; slDate: TStringList; begin SNTP := TIdSNTP.Create(temp); slDateTime := TStringList.Create; slDate := TStringList.Create; if AHost = ''then SNTP.Host := 'ntp1.stratum1.ru' else SNTP.Host := AHost; try if SNTP.SyncTime then begin slDateTime.Delimiter:= ' '; slDateTime.DelimitedText:= DateTimeToStr(SNTP.DateTime); slDate.Delimiter:= '.'; slDate.DelimitedText:= slDateTime[0]; AData1:= slDate[1]+'/'+slDate[0]+'/'+slDate[2]; {AData1:= Concat(slDate[1],'/',slDate[0],'/',slDate[2]);} nbSetVar('[zmaNTPServer]', PChar(SNTP.Host)); end; except begin AData1:= 'Error'; end; end; end;
anton, а у тебя весьма бодрый голос на видео, для человека испытывающего затруднения.
Ладно, шутки в сторону... Ошибка "хрен знает о чем" (AcsessViolation) говорит о неверном доступе к памяти (и в данном лучае просто шло перенаправление на вторую переменную при создании SNTP, которого в функции просто не оказывалось, т.к. он - временный, т.е. ссылка есть, а объекта нет). Вчерась, когда я писал код, я делал это прямо в броузере и наспех, и проморгал одну важную вещь, честно говоря, я сейчас вообще удивляюсь тому как это работало без ошибок и зависаний. В общем, я код поправил (см.прикрепление), теперь работает, но я бы, наверное сделал все иначе. Единственное замечу, что нужно правильно создавать и удалять(!) объекты. Впрочем, все приходит с опытом... Потому - теория всему голова! Я уже устал это повторять мишему.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Ошибка "хрен знает о чем" (AcsessViolation) говорит о неверном доступе к памяти (и в данном лучае просто шло перенаправление на вторую переменную при создании SNTP, которого в функции просто не оказывалось, т.к. он - временный, т.е. ссылка есть, а объекта нет).
Спасибо огромное, за помощь... Ковыряюсь дальше...
Добавлено (29 Марта 2014, 15:22) ---------------------------------------------
ЦитатаPeter ()
anton, а у тебя весьма бодрый голос на видео
Это обманчиво, я с 8 утра сижу бьюсь... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Герой - не успел проснуться, как сразу за работу. Обычно в это время я ещё сны вижу.
Цитатаanton ()
Спасибо огромное, за помощь
Да не за что. Только не следует думать, что так будет всегда.
Я лишь хотел продемонстрировать, что не следует слепо верить коду, гуляющему по сети, т.к. в большинстве случаев, он - кривой (его надо обязательно перепроверять перед использованием), и, в данном случае, ошибка сидела именно в коде консольки (и постепенно эта консолька сожрала бы всю память компутера, если бы её запускали бесконечно).
А вот с VLC - засада будет, и выражается она в том, что нет доступа к разным "вкусностям" штатного плейера, по крайней мере к звуковым фильтрам, и о таких вещах, как скажем, эквалайзер, придется позабыть (в SDK-то объявлено, а в реальности в библиотеке этого нет). Я ещё не разбирался с видео, но если и там такие же сюрпризы (что скорее всего), то от плейера почти ничего не остается - только стандартные пуск, стоп и т.п., ну и те прибамбасы, которые я сумею придумать. В общем, сильно разочаровывает этот VLC. По-началу, казаось, что можно будет сделать реальную вещь, а тут...
Они, блин, даже полноэкранный режим не могли по-нормальному организовать, и пришлось придумывать самому.
Таскать с собой 15 метров кодеков только ради воспроизведения потокового FLV (а все остальное может и WMP)...
С эквалайзером вообще забавно.. Я полазал специально по тамошнему форуму, так народ срашивал уже давно про эквалайзер (как?), на что разрабы смиренно отвечали: "Пока - никак! У нас есть заботы и по-важнее, а вот если найдется такой, кто сделает в билиотеке к нему доступ, мы скажем ему спасибо!"
Нормально, да? Впрочем, возможно для открытого проекта это - норма, и именно так они (открытые проекты) и создаются...
Кстати, "такой" нашелся и был патч для библы, который открывал доступ к эквалайзеру, но что-то там было криво и работало хреново, и патч "аннулировал" сам его разработчик. А пока "воз и ныне там"...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Добавлено (29 Марта 2014, 17:35) ---------------------------------------------
ЦитатаPeter ()
Да не за что. Только не следует думать, что так будет всегда.
А я и не думаю... после дня ковыряние со всем эти делом, решил отложить мозговой штурм по плагиностроению, пока не прочитаю книгу по Delphi 7, причем не как обычно по диагонали, а полностью от корки до корки. Так как мягко говоря бесперспективно ковыряться в этом всем без подобающих знаний...
Единственно о чем еще хочу спросить на последок, что бы уж довести дело с этим недоплагином до конца. Это как навесить стелистику NeoBook на элементы формы?
Работаееет!!! Конечно так удобнее использовать плагин в NeoBook!! Думаю плагин пригодится многим и для реализации самых разных задач, так что время потрачено не зря!!!
Цитатаanton ()
Пока какие нибудь данные с сервера (время или ошибку) получены не будут, дальше код выполняться не будет.
Означает ли это, что если север ничего не вернет, то NB-проект зависнет?
Означает ли это, что если север ничего не вернет, то NB-проект зависнет?
Нет, это означает что если сервер нечего не вернет или будит не доступен, в плагине вернется ошибка. "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
Всё-таки замечательно, когда плагин до пользователя доведен!! В отдельные переменные безусловно удобнее получать время и дату, и дату удобно получать в таком формате, в каком ее можно автоматически сопоставить с глобальной переменной NeoBook.
Цитатаanton ()
это означает что если сервер нечего не вернет
Антон, а сколько времени плагин дожидается ответа?
Ну, почему же недоплагином-то? Ведь работает же! А сразу сделать "ядрену бомбу" ни у кого не получится, и всегда нужно начинать с малого, и главное, не лениться.
Цитатаanton ()
как навесить стелистику NeoBook на элементы формы
А это уже кто на что горазд: кто-то собирает интерфейс из отдельных готовых элементов, кто-то вместо градиентов подставляет картинки, я же пошел самым длинным, но зато (на мой взгляд) самым эффективным путем - написал свои компоненты со всеми необходимыми для работы с NeoBook свойствами. Да, пришлось попотеть (зато много чего нового узнал и многому научился), но теперь "собрать" окошко помошника минутное дело, задать (если требуется) свойства элементам, а дальше только подставляй значения и получай результат (в самой уже NeoBook).
Цитатаanton ()
пока не прочитаю книгу по Delphi 7,
Просто прочитать мало, нужна постоянная практика для закрепления понимания прочитанного. Собственно тут как и в любом другом обучении. Никто не рождался со знанием языков программирования (или владением другим ремеслом), и все начинали, учились и учаться. Все знать невозможно, но постигнув азы теории, уже начинаешь ориентироваться в языке, и когда встречается (в каком-либо примере-исходнике) незнакомый код или надо сделать то, что раньше не делал, то уже знаешь (или по крайней мере представляешь) где искать ответ.
Я все это пропагандирую не потому-что хочу поумничать, а просто сам через это прошел (и прохожу).
Так-что, стесняться и бояться нечего, было бы желание...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Антон, аппетиты растут! Оказывается не так-то просто сравнить даты на компе и в интернете, если учесть, что прога будет работать на разных компьютерах...
Я обнаружил, что глобальная переменная [DateShort] - текущая дата в сокращенном Windows-формате (10/22/07) - (Месяц/Число/Год) возвращает нам дату не обязательно в виде 10/22/07 (как указано в справке), а в том Windows-формате, который выбран на компе пользователя. Что, в общем-то, логично. Получается, что плагин сейчас выдает время во втором варианте (см. скрин), а на компе пользователя формат может быть любым из пяти.
Можно ли плагин научить выдавать время в том формате, какой используется в текущей Windows?
А в идеале, чтобы можно было выбрать любой из пяти форматов Windows, плюс вариант "использовать настройки Windows" (чтобы плагин выдавал время в том же формате, какой используется в данной винде).
mishem, спасибо за рабочий вариант! Я попробовал, всё работает, но выдаёт результат всё равно не в том формате. Плагин выдаёт со знаком слеш, а дата на компе выходит с точками...
Учитывая, что есть команда StrReplace это, конечно, не проблема. На моей системе работает как надо! Но тогда надо вручную проверять - есть ли точки или используется слеш чтобы обеспечить работоспособность программы на другом компе. Т.е. если делать прогу, которая будет работать на неизвестных машинах, то лучше конечно, чтобы плагин мог просто определять формат даты на компе и выдавать дату в этом формате.
Но это всё из разряда предложений на будущее, если у Антона будет время и желание, как говорится. Демо-проект прикрепляю.
Т.е. если делать прогу, которая будет работать на неизвестных машинах, то лучше конечно, чтобы плагин мог просто определять формат даты на компе и выдавать дату в этом формате.
Попробую что нибудь придумать, но нечего обещать не могу... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
А в идеале, чтобы можно было выбрать любой из пяти форматов Windows, плюс вариант "использовать настройки Windows"
Как получить настройки формата времени из Windows пока не понял. Но сделал возможность выбора формата времени в настройке команды плагина. Плюс добавил функцию получения времени компьютера из операционной системы, так же в любом понравившемся формате.
anton, это супер! Клевые окошки помощника получились!! Аккуратно и стильно, и по дизу к NeoBook подходит.
Цитатаanton ()
сделал возможность выбора формата времени в настройке команды плагина. Плюс добавил функцию получения времени компьютера из операционной системы, так же в любом понравившемся формате.
А это полностью решает проблему автоматического сравнения времени на компе и в интернете, очень удобно! Можно просто жестко задать в каком формате получать и сравнивать и все дела! Красота!
Я тоже на это обратил внимание, еще в первой версии плагина. Думаю это просто винда делает, раз установлена связь с ntp сервером, то она время и синхронизирует. И винде без разницы какой проект и с какой целью такую связь установил. Если связь есть, надо синхронизироваться :). Возможно так происходит только если в настройках выставлена галочка "синхронизировать с сервером времени в Интернете", я пробовал эту гипотезу проверить на чужом компе, но винда не захотела галочку убирать :), подвисла, а времени разбираться не было. Попробую проверить на своем компе попозже. Может быть в ХР нет этого "автоматизма".
Добавлено (01 Апреля 2014, 13:48) --------------------------------------------- Да, проверил сейчас. Даже если эту галочку убрать, то время в винде синхронизируется автоматом, стоит только плагином воспользоваться.
раз установлена связь с ntp сервером, то она время и синхронизирует. И винде без разницы какой проект и с какой целью такую связь установил.
Тогда почему винда время не синхронизирует а только дату... Странно все это...
ЦитатаВадим ()
только если в настройках выставлена галочка "синхронизировать с сервером времени в Интернете"
У меня и с ней и без нее синхронизирует...
ЦитатаВадим ()
Может быть в ХР нет этого "автоматизма".
Может быть, но проверять лень, я только недавно по сносил все виртуалки с XP оставшиеся после теста VLC плагина...
Добавлено (01 Апреля 2014, 14:00) ---------------------------------------------
ЦитатаDEMBEL ()
может пригодится управлять временем w32tm /?
Я думаю врятли она поможет как то запретить насильную смену даты при соединении плагина с NTP... а вот установить, другой сервер времени в windows, выполнить синхронизацию и т.д. можно "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
anton, я заметил, что один формат на моем компе не всегда отрабатывает (слеш часто заменяется точкой). Пока не представляю с чем это может быть связано. Демо-проект прилагаю.
Я про такую штуку знаю. Решить могу только костылем, заменяющим значение точки на слеши. Почему то так воспринимает данный формат даты сам Делфи. Если в операционной системе выставлен вариант даты со слешеми все работает, а если с точками, то вместо слешей приходят точки... "Вы знаете, нам очень понравились все варианты, что вы прислали. Даже не знаем, что выбрать… А может попробуем объединить все три логотипа в один?"
а если с точками, то вместо слешей приходят точки..
Не совсем вникая о чем речь, чисто предположение. Смотрите настройки системы. Точка может стоять как знак разделитель по умолчанию. И вполне возможно что системе без разницы какой формат указывается, она заменяет на тот знак, который выставлен по умолчанию.
Так например у нас разделение десятичных разрядов идет точка, у инглишь запятая. Так же вполне возможно может играть роль и для слеша. Не хочешь читать хелп?