Вот с упаковкой файла GismeteoCodSity.txt http://pure-basic.narod.ru/forum/modjet_23_06_2011.rar
Заполнение выпадающих списков вынес в отдельный поток и теперь прога стартует за долю секунды.
Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике
Сообщений 151 страница 180 из 446
Поделиться15124.06.2011 00:26:14
Поделиться15224.06.2011 15:27:00
Зачет! Спасибо!
Поделиться15324.06.2011 15:45:48
Вопрос не в тему.
MessageRequester("", "ОК", #MB_OK|#MB_ICONINFORMATION)
Где можно посмотреть все флаги MessageRequester?
Поделиться15424.06.2011 15:55:28
де можно посмотреть все флаги MessageRequester?
Здесь http://msdn.microsoft.com/en-us/library/ms645505
Но можно использовать эту прогу, которая сама сгенерирует требуемый код http://purebasic.info/phpBB2/viewtopic.php?t=291
Поделиться15524.06.2011 16:37:09
Спасибо.
Поделиться15626.06.2011 21:01:58
radan любезно предоставил исходники библиотек.
Может кто переведет их на пурик или подскажет как это сделать?
Заранее спасибо!
Поделиться15726.06.2011 21:32:52
Может кто переведет их на пурик или подскажет как это сделать?
А чем они хороши? Всё то же самое, что и у нас, читает файл при помощи URLDownloadToFile и производит разбор полученного файла. Manu_ru при помощи регулярных выражений, Many_uk при помощи замены (Replace) тегов на пробелы, Прогноз погоды как и у нас, разбор XML.
Нет ни чего уникального, всё посредственно, даже банально.
Если только url нужен?
url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1=" & datas
url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req=" & datas
url = "http://informer.gismeteo.ru/xml/" & sity_id & "_1.xml"
Поделиться15826.06.2011 21:45:54
А чем они хороши?
Дело не в том, хороши они или нет, а в том, что по ним можно разобраться, как сделать курсы валют как в оригинальной проге. Если есть возможность разобрать htmlфайл, почему же не воспользоваться.
Прогноз погоды как и у нас
С прогнозом мы уже разобрались.
Отредактировано max (26.06.2011 21:51:05)
Поделиться15926.06.2011 21:52:23
Нет ни чего уникального, всё посредственно, даже банально.
Только не смейтесь над кодом...
Поделиться16026.06.2011 22:15:34
Только не смейтесь над кодом...
Да над чем смеяться то? Нормальный код.
Хочешь так же ка у него? Go в справку Пурика RegularExpression, сами регулярные выражения копируешь с его кода, он в файле Many_ru\Many_ru\Class_many.vb. По идее правильное выражение работает в не зависимости от языка - это отдельная фишка. Ну естественно чисто VB-шные константы типа & vbCr & vbLf & меняем на Пуриковские + #CRLF$ +
Поделиться16126.06.2011 22:17:51
Спасибо. Буду пробовать.
Поделиться16226.06.2011 23:52:45
Чет, не получается внятно расшифровать кириллицу с сайта!
Вроде там UTF8, но в место кириллица, знаки вопроса.....
А процедура Many_ru должна быть примерно такой:
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_ (hInet) InternetCloseHandle_ (hFile) InternetCloseHandle_ (hData) ProcedureReturn Bytes.l EndProcedure Procedure.s Many_ru() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected Dim Result$(0), ManyExpression.s Protected Pos Result = "Ошибка" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = PeekS(*mem, -1, #PB_UTF8) ShowMemoryViewer(@html, Bytes) If html<>"" Result = "Центральный банк Российской Федерации установил следующие курсы иностранных валют к рублю Российской Федерации на " + Datas + ":" + Chr(10) Restore Many_ru For i=1 To 34 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) If CreateRegularExpression(0, ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">(.*)</td>") If ExtractRegularExpression(0, html, Result$())>0 ;Debug Result$(0) Result + Many+" = "+Result$(0)+"руб.;" EndIf FreeRegularExpression(0) EndIf Next i EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure Debug Many_ru() DataSection Many_ru: Data.s "1 Австралийский доллар", "1 Азербайджанский манат", "1000 Армянских драмов", "10000 Белорусских рублей" Data.s "1 Болгарский лев", "1 Бразильский реал", "100 Венгерских форинтов ", "1000 Вон Республики Корея" Data.s "10 Датских крон", "1 Доллар США", "1 Евро", "100 Индийских рупий", "100 Казахских тенге" Data.s "1 Канадский доллар", "100 Киргизских сомов", "10 Китайских юаней", "1 Латвийский лат" Data.s "1 Литовский лит", "10 Молдавских леев", "10 Новых румынских леев", "10 Новых туркменских манатов" Data.s "10 Норвежских крон", "1 Польский злотый", "1 СДР (специальные права заимствования)", "1 Сингапурский доллар" Data.s "10 Таджикских сомони", "1 Турецкая лира", "1000 Узбекских сумов", "10 Украинских гривен" Data.s "1 Фунт стерлингов Соединенного королевства", "10 Чешских крон", "10 Шведских крон", "1 Швейцарский франк" Data.s "10 Южноафриканских рэндов", "100 Японских иен" EndDataSection
Поделиться16327.06.2011 15:40:42
Вот рабочий вариант.
Регулярные выражения не использовал, потому что и без них легко реализовывается.
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_ (hInet) InternetCloseHandle_ (hFile) InternetCloseHandle_ (hData) ProcedureReturn Bytes.l EndProcedure Procedure.s UTF2Ansi(str$) str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4) CP_IN=65001; #CP_UTF8=65001 CP_OUT=1251 MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len) WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0) ProcedureReturn str_in$ EndProcedure Procedure.s Many_ru() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected Dim Result$(0), ManyExpression.s Protected Pos Result = "Ошибка" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Result = "Центральный банк Российской Федерации установил следующие курсы иностранных валют к рублю Российской Федерации на " + Datas + ":" + Chr(10) Restore Many_ru For i=1 To 35 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Result + " "+Many+" = "+Mid(html, Pos1, Pos2-Pos1) +" руб.;" EndIf EndIf Next i EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 306, 133) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetText(0,Many_ru()) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf DataSection Many_ru: Data.s "1 Австралийский доллар", "1 Азербайджанский манат", "1000 Армянских драмов", "10000 Белорусских рублей" Data.s "1 Болгарский лев", "1 Бразильский реал", "100 Венгерских форинтов ", "1000 Вон Республики Корея" Data.s "10 Датских крон", "1 Доллар США", "1 Евро", "100 Индийских рупий", "100 Казахских тенге" Data.s "1 Канадский доллар", "100 Киргизских сомов", "10 Китайских юаней", "1 Латвийский лат" Data.s "1 Литовский лит", "10 Молдавских леев", "10 Новых румынских леев", "10 Новых туркменских манатов" Data.s "10 Норвежских крон", "1 Польский злотый", "1 СДР (специальные права заимствования)", "1 Сингапурский доллар" Data.s "10 Таджикских сомони", "1 Турецкая лира", "1000 Узбекских сумов", "10 Украинских гривен" Data.s "1 Фунт стерлингов Соединенного королевства", "10 Чешских крон", "10 Шведских крон", "1 Швейцарский франк" Data.s "10 Южноафриканских рэндов", "100 Японских иен" EndDataSection
Поделиться16427.06.2011 16:06:02
А процедура Many_ru должна быть примерно такой
Спасибо.
Чет, не получается внятно расшифровать кириллицу с сайта!
Есть у кого-нибудь какие идеи?
Поделиться16527.06.2011 16:13:35
Есть у кого-нибудь какие идеи?
Выше выложил рабочий код - процедура UTF2Ansi преобразовывает кодировки.
Поделиться16627.06.2011 16:25:53
Выше выложил рабочий код
Спасибо. Не заметил.
Поделиться16727.06.2011 19:53:45
Попробовал на основе кода из поста 163 сделать курс валют для Украины. Выводится заголовок и все. Что не так?
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_ (hInet) InternetCloseHandle_ (hFile) InternetCloseHandle_ (hData) ProcedureReturn Bytes.l EndProcedure Procedure.s UTF2Ansi(str$) str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4) CP_IN=65001; #CP_UTF8=65001 CP_OUT=1251 MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len) WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0) ProcedureReturn str_in$ EndProcedure Procedure.s Many_uk() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected Dim Result$(0), ManyExpression.s Protected Pos Result = "Помилка при розшифровці файлу" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Result = "Національний банк України. Середній курс гривні до іноземних валют на " + Datas + " становить:" + Chr(10) Restore Many_uk For i=1 To 27 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Result + " "+Many+" = "+Mid(html, Pos1, Pos2-Pos1) +" грн.;" EndIf EndIf Next i EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 163, 90) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetText(0,Many_uk()) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf DataSection Many_uk: Data.s "100 австралійських доларів", "100 азербайджанських манатів", "100 англійських фунтів стерлінгів", "10 білоруських рублів" Data.s "100 датських крон", "100 доларів США", "100 ЄВРО ", "100 ісландських крон" Data.s "100 казахстанських тенге", "100 канадських доларів", "100 латвійських латів", "100 литовських літів", "100 молдовських леїв" Data.s "100 норвезьких крон", "100 польських злотих", "10 російських рублів", "100 сінгапурських доларів" Data.s "100 СПЗ", "100 турецьких лір", "100 туркменських манатів", "1000 угорських форинтів" Data.s "100 узбецьких сумів", "100 чеських крон", "100 шведських крон", "100 швейцарських франків" Data.s "100 юанів женьміньбі (Китай)", "1000 японських єн" EndDataSection
Отредактировано max (27.06.2011 19:56:53)
Поделиться16827.06.2011 20:48:29
Там сайт другой и поэтому метод парсинга html странички тоже отличается.
Поделиться16927.06.2011 20:54:53
И как теперь быть?
Поделиться17027.06.2011 21:02:03
И как теперь быть?
Просто открывается сайт в браузере и просматривается код страницы чтобы понять как из неё (странички) выудить требуемую информацию.
Так вроде работает:
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_ (hInet) InternetCloseHandle_ (hFile) InternetCloseHandle_ (hData) ProcedureReturn Bytes.l EndProcedure Procedure.s UTF2Ansi(str$) str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4) CP_IN=65001; #CP_UTF8=65001 CP_OUT=1251 MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len) WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0) ProcedureReturn str_in$ EndProcedure Procedure.s Many_uk() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected ManyExpression.s, Temp.s Protected Pos, Pos1, Pos2 Result = "Помилка при розшифровці файлу" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Pos = FindString(html, "<td>Офіційний курс</td>", 1) If Pos Pos1 = FindString(html, "</table>", Pos+Len("<td>Офіційний курс</td>")) If Pos1 html=Mid(html, Pos, Pos1-Pos) Result = "Національний банк України. Середній курс гривні до іноземних валют на " + Datas + " становить:" + Chr(10) Restore Many_uk For i=1 To 27 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression + "</td>" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Temp.s=Mid(html, Pos1, Pos2-Pos1) Pos = FindString(ReverseString(Temp),">", 1) If Pos>0 Result + " "+Many+" = "+Mid(Temp, Len(Temp)-Pos+2)+" грн.;" EndIf EndIf EndIf Next i EndIf EndIf EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 163, 90) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetText(0,Many_uk()) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf DataSection Many_uk: Data.s "100 австралійських доларів", "100 азербайджанських манатів", "100 англійських фунтів стерлінгів", "10 білоруських рублів" Data.s "100 датських крон", "100 доларів США", "100 ЄВРО ", "100 ісландських крон" Data.s "100 казахстанських тенге", "100 канадських доларів", "100 латвійських латів", "100 литовських літів", "100 молдовських леїв" Data.s "100 норвезьких крон", "100 польських злотих", "10 російських рублів", "100 сінгапурських доларів" Data.s "100 СПЗ", "100 турецьких лір", "100 туркменських манатів", "1000 угорських форинтів" Data.s "100 узбецьких сумів", "100 чеських крон", "100 шведських крон", "100 швейцарських франків" Data.s "100 юанів женьміньбі (Китай)", "1000 японських єн" EndDataSection
Поделиться17127.06.2011 21:05:10
Так вроде работает
Точно работает.
Поделиться17227.06.2011 21:08:57
Осталось самое "простое": соеденить их и при изменении ComboBoxGadget выбирать соответствующий сайт.
Поделиться17327.06.2011 21:16:10
самое "простое"
Почему в кавычках?
Поделиться17427.06.2011 21:30:28
Почему в кавычках?
Написал, не посмотрев толком код.
Вот что у меня получилось:
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_ ( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_ ( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_ (hInet) InternetCloseHandle_ (hFile) InternetCloseHandle_ (hData) ProcedureReturn Bytes.l EndProcedure Procedure.s UTF2Ansi(str$) str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4) CP_IN=65001; #CP_UTF8=65001 CP_OUT=1251 MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len) WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0) ProcedureReturn str_in$ EndProcedure Procedure.s Many_ru() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected Dim Result$(0), ManyExpression.s Protected Pos Result = "Ошибка" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Result = "Центральный банк Российской Федерации установил следующие курсы иностранных валют к рублю Российской Федерации на " + Datas + ":" + Chr(10) Restore Many_ru For i=1 To 35 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Result + " "+Many+" = "+Mid(html, Pos1, Pos2-Pos1) +" руб.;" EndIf EndIf Next i EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure Procedure.s Many_uk() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected ManyExpression.s, Temp.s Protected Pos, Pos1, Pos2 Result = "Помилка при розшифровці файлу" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Pos = FindString(html, "<td>Офіційний курс</td>", 1) If Pos Pos1 = FindString(html, "</table>", Pos+Len("<td>Офіційний курс</td>")) If Pos1 html=Mid(html, Pos, Pos1-Pos) Result = "Національний банк України. Середній курс гривні до іноземних валют на " + Datas + " становить:" + Chr(10) Restore Many_uk For i=1 To 27 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression + "</td>" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Temp.s=Mid(html, Pos1, Pos2-Pos1) Pos = FindString(ReverseString(Temp),">", 1) If Pos>0 Result + " "+Many+" = "+Mid(Temp, Len(Temp)-Pos+2)+" грн.;" EndIf EndIf EndIf Next i EndIf EndIf EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure If OpenWindow(0, 0, 0, 400, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 200, 90) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetText(0,Many_uk()) ComboBoxGadget(30, 220, 28, 142, 21) AddGadgetItem(30, -1, "Украина") AddGadgetItem(30, -1, "Россия") ;{----------События компонентов---------- If Event=#PB_Event_Gadget Select EventGadget() Case 30 If EventType()=1 Select GetGadgetState(30) Case 0 Case 1 EndSelect EndIf EndSelect EndIf ;}------------------------------------- Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf DataSection Many_ru: Data.s "1 Австралийский доллар", "1 Азербайджанский манат", "1000 Армянских драмов", "10000 Белорусских рублей" Data.s "1 Болгарский лев", "1 Бразильский реал", "100 Венгерских форинтов ", "1000 Вон Республики Корея" Data.s "10 Датских крон", "1 Доллар США", "1 Евро", "100 Индийских рупий", "100 Казахских тенге" Data.s "1 Канадский доллар", "100 Киргизских сомов", "10 Китайских юаней", "1 Латвийский лат" Data.s "1 Литовский лит", "10 Молдавских леев", "10 Новых румынских леев", "10 Новых туркменских манатов" Data.s "10 Норвежских крон", "1 Польский злотый", "1 СДР (специальные права заимствования)", "1 Сингапурский доллар" Data.s "10 Таджикских сомони", "1 Турецкая лира", "1000 Узбекских сумов", "10 Украинских гривен" Data.s "1 Фунт стерлингов Соединенного королевства", "10 Чешских крон", "10 Шведских крон", "1 Швейцарский франк" Data.s "10 Южноафриканских рэндов", "100 Японских иен" Many_uk: Data.s "100 австралійських доларів", "100 азербайджанських манатів", "100 англійських фунтів стерлінгів", "10 білоруських рублів" Data.s "100 датських крон", "100 доларів США", "100 ЄВРО ", "100 ісландських крон" Data.s "100 казахстанських тенге", "100 канадських доларів", "100 латвійських латів", "100 литовських літів", "100 молдовських леїв" Data.s "100 норвезьких крон", "100 польських злотих", "10 російських рублів", "100 сінгапурських доларів" Data.s "100 СПЗ", "100 турецьких лір", "100 туркменських манатів", "1000 угорських форинтів" Data.s "100 узбецьких сумів", "100 чеських крон", "100 шведських крон", "100 швейцарських франків" Data.s "100 юанів женьміньбі (Китай)", "1000 японських єн" EndDataSection
Как я понял что-бы все работало, надо в SetGadgetText(0,Many_uk()) при выборе другой страны менять uk на ru и наоборот.
Отредактировано max (27.06.2011 21:31:25)
Поделиться17527.06.2011 21:48:04
Как я понял что-бы все работало, надо в SetGadgetText(0,Many_uk()) при выборе другой страны менять uk на ru и наоборот.
Да.
Procedure.l DownloadToMem(URL.s, *lpRam, ramsize.l) Protected agent.s, hInet.l, hData.l, Bytes.l agent.s = "IE 6.0" hInet.l = InternetOpen_( @agent.s,0,0,0,0 ) hData.l = InternetOpenUrl_( hInet, @URL.s, "", 0, $8000000, 0 ) If hData > 0 : InternetReadFile_ ( hData, *lpRam, ramsize.l, @Bytes.l ) : Else : Bytes = -1 : EndIf InternetCloseHandle_(hInet) ;InternetCloseHandle_(hFile) InternetCloseHandle_(hData) ProcedureReturn Bytes.l EndProcedure Procedure.s UTF2Ansi(str$) str_in$=str$: len=Len(str_in$)+5: str_tmp$=Space(len*4) CP_IN=65001; #CP_UTF8=65001 CP_OUT=1251 MultiByteToWideChar_(CP_IN,0,@str_in$,len,@str_tmp$,len) WideCharToMultiByte_(CP_OUT,0,@str_tmp$,len,@str_in$,len,0,0) ProcedureReturn str_in$ EndProcedure Procedure.s Many_ru() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected Dim Result$(0), ManyExpression.s Protected Pos Result = "Ошибка" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://www.cbr.ru/currency_base/D_print.aspx?date_req="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Result = "Центральный банк Российской Федерации установил следующие курсы иностранных валют к рублю Российской Федерации на " + Datas + ":" + Chr(10) Restore Many_ru For i=1 To 35 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression+"</td>" + #CRLF$ + "<td align="+Chr(34)+"right"+Chr(34)+">" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Result + " "+Many+" = "+Mid(html, Pos1, Pos2-Pos1) +" руб.;" EndIf EndIf Next i EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure Procedure.s Many_uk() Protected Result.s, *mem, Many.s Protected url.s, Bytes, Datas.s, html.s Protected ManyExpression.s, Temp.s Protected Pos, Pos1, Pos2 Result = "Помилка при розшифровці файлу" Datas = FormatDate("%dd.%mm.%yyyy",Date()) url = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx?__EVENTARGUMENT=&__EVENTTARGET=&Text1="+Datas *mem = AllocateMemory(200000) If *mem Bytes = DownloadToMem(url, *mem, 200000) If Bytes html = UTF2Ansi(PeekS(*mem)) If html<>"" Pos = FindString(html, "<td>Офіційний курс</td>", 1) If Pos Pos1 = FindString(html, "</table>", Pos+Len("<td>Офіційний курс</td>")) If Pos1 html=Mid(html, Pos, Pos1-Pos) Result = "Національний банк України. Середній курс гривні до іноземних валют на " + Datas + " становить:" + Chr(10) Restore Many_uk For i=1 To 27 Read.s Many Pos = FindString(Many, " ", 1) ManyExpression = Right(Many, Len(Many)-Pos) ManyExpression + "</td>" Pos1 = FindString(html, ManyExpression, 1) If Pos1>0 Pos1+Len(ManyExpression) Pos2 = FindString(html,"</td>",Pos1) If Pos2>0 Temp.s=Mid(html, Pos1, Pos2-Pos1) Pos = FindString(ReverseString(Temp),">", 1) If Pos>0 Result + " "+Many+" = "+Mid(Temp, Len(Temp)-Pos+2)+" грн.;" EndIf EndIf EndIf Next i EndIf EndIf EndIf EndIf FreeMemory(*mem) EndIf ProcedureReturn Result EndProcedure If OpenWindow(0, 0, 0, 400, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) EditorGadget(0, 8, 8, 200, 90) SendMessage_(GadgetID(0),#EM_SETTARGETDEVICE, #Null, 0) SetGadgetText(0,Many_uk()) ComboBoxGadget(30, 220, 28, 142, 21) AddGadgetItem(30, -1, "Украина") AddGadgetItem(30, -1, "Россия") SetGadgetState(30,0) Repeat Event=WaitWindowEvent() ;{----------События компонентов---------- If Event=#PB_Event_Gadget Select EventGadget() Case 30 If EventType()=1 Select GetGadgetState(30) Case 0 SetGadgetText(0,Many_uk()) Case 1 SetGadgetText(0,Many_ru()) EndSelect EndIf EndSelect EndIf ;}------------------------------------- Until Event = #PB_Event_CloseWindow EndIf DataSection Many_ru: Data.s "1 Австралийский доллар", "1 Азербайджанский манат", "1000 Армянских драмов", "10000 Белорусских рублей" Data.s "1 Болгарский лев", "1 Бразильский реал", "100 Венгерских форинтов ", "1000 Вон Республики Корея" Data.s "10 Датских крон", "1 Доллар США", "1 Евро", "100 Индийских рупий", "100 Казахских тенге" Data.s "1 Канадский доллар", "100 Киргизских сомов", "10 Китайских юаней", "1 Латвийский лат" Data.s "1 Литовский лит", "10 Молдавских леев", "10 Новых румынских леев", "10 Новых туркменских манатов" Data.s "10 Норвежских крон", "1 Польский злотый", "1 СДР (специальные права заимствования)", "1 Сингапурский доллар" Data.s "10 Таджикских сомони", "1 Турецкая лира", "1000 Узбекских сумов", "10 Украинских гривен" Data.s "1 Фунт стерлингов Соединенного королевства", "10 Чешских крон", "10 Шведских крон", "1 Швейцарский франк" Data.s "10 Южноафриканских рэндов", "100 Японских иен" Many_uk: Data.s "100 австралійських доларів", "100 азербайджанських манатів", "100 англійських фунтів стерлінгів", "10 білоруських рублів" Data.s "100 датських крон", "100 доларів США", "100 ЄВРО ", "100 ісландських крон" Data.s "100 казахстанських тенге", "100 канадських доларів", "100 латвійських латів", "100 литовських літів", "100 молдовських леїв" Data.s "100 норвезьких крон", "100 польських злотих", "10 російських рублів", "100 сінгапурських доларів" Data.s "100 СПЗ", "100 турецьких лір", "100 туркменських манатів", "1000 угорських форинтів" Data.s "100 узбецьких сумів", "100 чеських крон", "100 шведських крон", "100 швейцарських франків" Data.s "100 юанів женьміньбі (Китай)", "1000 японських єн" EndDataSection
Поделиться17627.06.2011 21:55:04
Спасибо. Я так пробовал, только забыл добавить SetGadgetState(30,0), и не заработало.
Поделиться17728.06.2011 18:23:11
Привет.
Попытался добавить "авторов" с помощью процедуры ProgramItit_Thread(*x). Судя по коду, файл добавляется строкой
*mem = UnPak(?GismeteoCodSity_pak)
,преобразуется, а затем создается
AddGadgetItem(#ComboBox_0, x,String)
с текстом. Возникло пара вопросов:
1. как можно добавить несколько файлов?
2. как сделать, чтобы при смене языка выбирался свой pak-файл?
Архив с файлами.
Поделиться17828.06.2011 18:57:46
Попытался добавить "авторов" с помощью процедуры ProgramItit_Thread(*x).
Текста так много что его нужно упаковывать?
Судя по коду, файл добавляется строкой
Нет, это распаковка сжатого файла, а файл был добавлен в ДатаСекцию.
GismeteoCodSity_pak: IncludeBinary "GismeteoCodSity.pak"
Процедуре нужно передать указатель на первый байт сжатых данных, и она (процедура) вернет указатель на начало в памяти распакованных данных. Есть это текст, то его можно прочитать из памяти функцией PeekS.
Память нужно обязательно освободить функцией FreeMemory когда она уже не нужна.
1. как можно добавить несколько файлов?
Или с диска загружать (придется за прогой тащить все эти файлы) или поместить в ДатаСекцию к уже имеющимся.
2. как сделать, чтобы при смене языка выбирался свой pak-файл?
Если он на диске, то загрузить с диска, а есть в ДатаСекции, то прочитать от туда.
Поделиться17928.06.2011 19:25:33
Добавил время.
Текста так много что его нужно упаковывать?
Их будет два.
придется за прогой тащить все эти файлы
Вот этого и не хочется.
Над остальным подумаем.
Поделиться18028.06.2011 19:43:04
Их будет два.
А в килобайтах (или символах) сколько?
Просто в окне "О программе" обычно не много текста и нет необходимости его упаковывать.