tag:blogger.com,1999:blog-17077043401058499582024-03-14T05:31:28.111+01:00Progbis SoftwareProgramowanie c++/c#/delphi/javas/php/installscript/nativescript <br>
Przykłady - przydatne funkcjePrzemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.comBlogger108125tag:blogger.com,1999:blog-1707704340105849958.post-9284983529921941402022-11-22T10:07:00.003+01:002022-11-22T10:07:45.623+01:00Nativescript close application<p> Example of use in function onClose()<br /><br />import { isIOS } from '@nativescript/core/platform';</p><p>//declaration of native functions<br />declare const android:any;<br />declare const exit: (code: number)=>void;</p><p> </p><p>//Use for example in component <br /></p><p>onClose() {<br /><br /> if (isIOS) {<br /> exit(0);<br /> } else { <br /> android.os.Process.killProcess(android.os.Process.myPid());<br /> }<br /> }<br /></p>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-76722278163986570682022-11-22T09:58:00.000+01:002022-11-22T09:58:00.338+01:00Nativescript block Back Button on Android<p> Example of blocking Soft Back Button on android in angular component<br /></p><p>import { Component, OnInit } from '@angular/core';<br />import { isAndroid } from '@nativescript/core/platform';<br />import { AndroidApplication, AndroidActivityBackPressedEventData } from "@nativescript/core/application";<br />import * as app from "@nativescript/core/application";</p><p>declare const android:any; <br /></p><p></p><p></p><p><i>//Put this code in implementation OnInit of component </i><br /><br />ngOnInit() { <br /> if (isAndroid) {<br /> app.android.on(AndroidApplication.activityBackPressedEvent, (data: AndroidActivityBackPressedEventData) => { <br /> data.cancel = true; // prevents default back button behavior <br /> });<br /> }<br /> }<br /></p><p><br /></p>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-51763767152072344922022-11-09T16:10:00.000+01:002022-11-09T16:10:04.025+01:00Nativescript: Assets Folder Not Including html,js, css files<div style="text-align: left;"><span style="font-family: arial;">In default options </span><code><span style="font-family: arial;">WebpackPlugin copy Images and fonts folder.</span><span style="font-family: arial;"> </span></code></div><div style="text-align: left;"><code><span style="font-family: arial;">If You need to copy for example assets folder with js, html etc. for webView You mast update<br /></span></code><code> </code></div><div style="text-align: left;"><code>CopyWebpackPlugin</code> in your <code>webpack.config.js</code> to include the asset folder<br /><br /><span style="font-family: arial;">for 6.x version of nativescript |</span><pre class="default s-code-block"><code class="hljs language-csharp"><span class="hljs-keyword">new</span> CopyWebpackPlugin([
{ <span class="hljs-keyword">from</span>: <span class="hljs-string">"fonts/**"</span> },
{ <span class="hljs-keyword">from</span>: <span class="hljs-string">"**/*.jpg"</span> },
{ <span class="hljs-keyword">from</span>: <span class="hljs-string">"**/*.png"</span> },
{ <span class="hljs-keyword">from</span>: <span class="hljs-string">"assets/**"</span> }, <span class="hljs-comment">// Add your asset folder path like this</span>
], { ignore: [`${relative(appPath, appResourcesFullPath)}<span class="hljs-comment">/**`] }),<br /><br /><span style="font-family: arial;">for 7,8 version </span><br /><br /></span></code><code class="hljs language-csharp"><span class="hljs-comment"></span></code><code class="hljs language-csharp"><span class="hljs-comment"></span></code><span class="comment-copy"><code>webpack.Utils.addCopyRule('assets/**')</code></span><br /></pre><br /><br /></div>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-4092393366019487692014-02-18T09:44:00.002+01:002014-02-18T09:46:55.462+01:00JS:Clickjack-A [Trj], JS/Agent.NKW trojan na stronie - RozwiązanieTen Trojan dołącza się zazwyczaj do pliku php, jako skrypt js<br />
U mnie wystąpił w templetce modułu joomla inowslider.<br />
Usunięcie:<br />
<br />
1. Otwórz \modules\mod_inowslider\tmpl\<b>default.php</b><br />
<br />
2. Poszuka i usuń skrypt wyglądający mniej więcej tak :<br />
<code><script language="JavaScript"><br />function dnnViewState()<br />{<br />var a=0,m,v,t,z,x=new Array('xxxxxx'),l=x.length;while(++a<=l){m=x[l-a];<br />t=z='';<br />for(v=0;v<m.length;){t+=m.charAt(v++);<br />if(t.length==2){z+=String.fromCharCode(parseInt(t)+25-l+a);<br />t='';}}x[l-a]=z;}document.write('<'+x[0]+' '+x[4]+'>.'+x[2]+'{'+x[1]+'}</'+x[0]+'>');}dnnViewState();<br /></script> </code><br />
<br />
3.Na końcu pliku zlokalizuj i usuń ten kod.<br />
<code><p class="dnn">By A <a href="<a class="vglnk" href="http://www.autson.com/" rel="nofollow" title="Link added by VigLink">http://www.autson.com/</a>" title="web design company">Web Design</a></p></code><br />
<br />
<code>4.Po zapisaniu usunąłeś trojana z modułu, możesz jeszcze przeskanować plik dla pewności antywirusem np: Avastem, Nodem</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-5430213798861160952013-03-22T14:32:00.000+01:002013-03-22T14:46:39.454+01:00Set Application Run As Admin<h3>Dzisiaj potrzebowałem funkcji do ustawienia instalowanej aplikacji w tryb uruchomienia jako administrator - oto ona:</h3><br />
<code>
export prototype BOOL SetRunAsAdmin(STRING, BOOL);</code><br />
Parametry funkcji:<br />
<ul>
<li>szFile - nazwa pliku</li>
<li>bLog - czy zapisywać do logu</li>
</ul>
<code>
function BOOL SetRunAsAdmin(szFile, bLog)<br />#define UKEYLAYERS "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"<br />#define DATA "RUNASADMIN"<br />string szName, sKey;<br />LIST listSubKeys;<br />number nReturn;<br />int i;<br />begin<br /> if (bLog) then WriteLog(0,"- Dodanie praw administratora do uruchomienia pliku: "+szFile); endif;<br /> <br /> //Przestaw rejestr na 64 bity<br /> if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY; endif;<br /> <br /> szName = szFile;<br /> RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); <br /> if (!RegDBKeyExist(UKEYLAYERS)) then<br /> if (bLog) then WriteLog(1," - brak klucza rejestru "+UKEY); endif; <br /> if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS &amp; ~REGDB_OPTION_WOW64_64KEY; endif; <br /> return FALSE;<br /> endif;<br /> <br /> //Na istniejącym kluczu;<br /> listSubKeys = ListCreate(STRINGLIST);<br /> nReturn = RegDBQueryKey(UKEYLAYERS, REGDB_NAMES, listSubKeys );<br /> if (nReturn=0) then<br /> if (ListCount(listSubKeys)&gt;0) then <br /> ListSetIndex(listSubKeys,LISTFIRST);<br /> for i=0 to ListCount(listSubKeys)-1 <br /> ListCurrentString ( listSubKeys, sKey ); <br /> if (sKey==szName) then<br /> if (bLog) then WriteLog(1," - klucz ustawien już istnieje"); endif; <br /> RegDBSetKeyValueEx(UKEYLAYERS, szName, REGDB_STRING, DATA, -1);<br /> if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS &amp; ~REGDB_OPTION_WOW64_64KEY; endif; <br /> return TRUE; <br /> endif;<br /> <br /> ListSetIndex ( listSubKeys, LISTNEXT );<br /> endfor; <br /> endif; <br /> endif;<br /> <br /> //Stworz nowy<br /> nReturn = RegDBSetKeyValueEx(UKEYLAYERS, szName, REGDB_STRING, DATA, -1);<br /> if (nReturn==0) then<br /> if (bLog) then WriteLog(1," - prawa administratora dodane"); endif; <br /> if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS &amp; ~REGDB_OPTION_WOW64_64KEY; endif; <br /> return TRUE;<br /> else<br /> if (bLog) then WriteLog(1," - nie dodano praw administratora"); endif;<br /> if (SYSINFO.bIsWow64!=0) then REGDB_OPTIONS = REGDB_OPTIONS &amp; ~REGDB_OPTION_WOW64_64KEY; endif; <br /> return FALSE; <br /> endif; <br />end;
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com1tag:blogger.com,1999:blog-1707704340105849958.post-17834161514815738552012-07-09T14:48:00.001+02:002012-07-09T14:51:09.663+02:00Pobranie ścieżki DocumentRoot z konfiguracji Apache w InstallShield - Get DocumentRoot from Apache Config FileNiedawno potrzebna była mi kolejna funkcja zwracająca ścieżkę do DocumentRoot z konfiguracji serwera Apache, oto ona:<br />
Nagłówek funkcji<br />
<br />
<code>export prototype BOOL GetApacheDocRoot(STRING /*plik konfiguracyjny Apache*/, BYREF STRING /*DocRootPath*/, BOOL /*bLog*/);</code><br />
<br />
Parametry funkcji:<br />
<ul>
<li>ścieżka wraz z plikiem konfiguracyjnym np; httpd.conf</li>
<li>referencja do zmiennej przechowująca ścieżkę</li>
<li>bLog - czy zapisywać do logu</li>
</ul>
Zwracane wartość: true/false<br />
<br />
A oto ciało funkcji:<br />
<br />
<code>function BOOL GetApacheDocRoot(szApacheConfigFile, svApacheDocRoot, bLog)<br />BOOL bResult;<br />LIST lsApache;<br />string szLine,szNewLine, szDocRoot;<br />int i;<br />begin <br /> if (bLog) then WriteLog(0,"* Pobieranie scieżki do DocumentRoot z konfiguracji Apache..."); endif;<br /> bResult = FALSE;<br /> if (Is(FILE_EXISTS,szApacheConfigFile)) then<br /> lsApache = ListCreate(STRINGLIST); <br /> ListReadFromFile ( lsApache, szApacheConfigFile ); //Odczyt Apache Conf<br /> if (ListCount(lsApache)>0) then <br /> ListSetIndex(lsApache,LISTFIRST); <br /> for i=0 to ListCount(lsApache)-1 <br /> ListCurrentString ( lsApache, szLine ); <br /> szLine = StrTrim(szLine);<br /> if (StrFind(szLine,"DocumentRoot")>=0) then<br /> szNewLine = szLine;<br /> szNewLine = StrTrim(szNewLine);<br /> if (StrFind(szNewLine,"DocumentRoot")=0) then<br /> StrSub(szDocRoot,szNewLine, StrLength("DocumentRoot")+1, StrLength(szNewLine));<br /> szDocRoot = StrTrim(szDocRoot); <br /> bResult = TRUE; <br /> if (bLog) then WriteLog(2,"DocumentRoot : "+szDocRoot); endif;<br /> StrReplace(szDocRoot,"\"","",0);<br /> StrReplace(szDocRoot,"/","\\",0);<br /> StrRemoveLastSlash(szDocRoot);<br /> svApacheDocRoot = szDocRoot;<br /> endif; <br /> endif;<br /> ListSetIndex(lsApache,LISTNEXT);<br /> endfor; <br /> endif; <br /> endif;<br /><br /> ListDestroy(lsApache);<br /><br /> return bResult;<br />end; </code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-10963755929964948302012-07-05T15:21:00.000+02:002012-07-05T15:23:39.606+02:00Pobranie ścieżki instalacyjnej zainstalowanego produktu po przez GUID - Get Install location by Product GUID in InstallShieldPrzy tworzeniu aktualizacji czasami zachodzi potrzeba odczytania ścieżki instalacyjnej zainstalowanego wcześniej produktu. Jeżeli mamy GUID poprzedniego produktu możemy do tego wykorzystać poniższą funkcję. Funkcja odczytuje wartości rejestru zainstalowanych produktów. <br />
Parametry:<br />
<ul>
<li><i>GUID </i>- GUID zainstalowanego produktu\</li>
<li><i>Path </i>- odczytana ścieżka </li>
<li><i>Name </i>- odczytana nazwa produktu </li>
<li><i>Version </i>- odczytana wersja zainstalowanego produktu </li>
<li><i>bLog </i>- zapis do loga </li>
</ul>
<br />
Funkcja zwraca <i>true</i>/<i>false</i>, wartość <i>true </i>w przypadku pozytywnego odczytania ścieżki instalacyjnej.<br />
<br />
Nagłówek funkcji <br />
<br />
<code> export prototype BOOL GetInstallLocationGUID(STRING, /*GUID*/ BYREF STRING /*Path*/, BYREF STRING /*Name*/, BYREF STRING /*Version*/, BOOL /*bLog*/); </code><br />
<br />
Ciało funkcji <br />
<code>
function BOOL GetInstallLocationGUID(szGUID, svPath, svName, svVersion, bLog)<br />#define UKEY "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"<br />string RegPath, sKey, sValue, sData, sFolder; <br />number nReturn, nResult, nType, nSize, i, nData; <br />BOOL bResult;<br />LIST listSubKeys;<br />begin<br /> bResult = FALSE;<br /> <br /> if (bLog) then WriteLog(1,"Odczyt ścieżki do zainstalowanego produktu"); endif; <br /> <br /> listSubKeys = ListCreate(STRINGLIST); <br /> RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); <br /> nReturn = RegDBQueryKey(UKEY, REGDB_KEYS, listSubKeys );<br /> if (nReturn=0) then<br /> ListGetFirstString ( listSubKeys, sKey );<br /> if (ListCount(listSubKeys)>0) then <br /> <br /> ListSetIndex(listSubKeys, LISTFIRST);<br /> for i=0 to ListCount(listSubKeys)-1<br /> ListCurrentString ( listSubKeys, sKey ); <br /> if (sKey==szGUID) then <br /> if (bLog) then WriteLog(2,"- znaleziono zainstalowany produkt "+szGUID); endif; <br /> <br /> RegPath=UKEY+"\\"+sKey;<br /> sFolder=sKey;<br /> if (RegDBKeyExist(RegPath)==1) then <br /> <br /> sKey = RegPath; <br /> sValue="DisplayName";<br /> nType = REGDB_STRING;<br /> if (RegDBGetKeyValueEx( sKey, sValue, nType, sData, nSize )==0) then<br /> svName = sData;<br /> if (bLog) then WriteLog(3,"- nazwa produktu "+sData); endif; <br /> else<br /> svName = "";<br /> if (bLog) then WriteLog(3,"- brak klucza nazwy produktu "); endif; <br /> endif; <br /> <br /> sValue="DisplayVersion"; <br /> if (RegDBGetKeyValueEx( sKey, sValue, nType, sData, nSize )==0) then<br /> svVersion = sData;<br /> if (bLog) then WriteLog(3,"- wersja produktu "+sData); endif; <br /> else<br /> svVersion = "";<br /> if (bLog) then WriteLog(3,"- brak klucza wersji produktu "); endif; <br /> endif;<br /> <br /> sValue="InstallLocation"; <br /> if (RegDBGetKeyValueEx( sKey, sValue, nType, sData, nSize )==0) then<br /> if (bLog) then WriteLog(3,"- ścieżka instalacji "+sData); endif; </code><br />
<code> svPath = sData;<br /> bResult = TRUE;<br /> else<br /> if (bLog) then WriteLog(3,"- brak klucza ścieżki instalacyjne "); endif; <br /> endif;<br /> <br /> sValue="InstallDate"; <br /> if (RegDBGetKeyValueEx( sKey, sValue, nType, sData, nSize )==0) then<br /> if (bLog) then WriteLog(3,"- data instalacji "+sData); endif; <br /> bResult = TRUE;<br /> else<br /> if (bLog) then WriteLog(3,"- brak klucza daty instalacji "); endif; <br /> endif;<br /> endif;<br /> endif; <br /> <br /> ListSetIndex(listSubKeys, LISTNEXT);<br /> endfor;<br /> <br /> else<br /> if (bLog) then WriteLog(2,"- brak listy zainstalowanych produktow GUID"); endif; <br /> endif;<br /> <br /> else<br /> if (bLog) then WriteLog(2,"- błąd odczytu rejestru"); endif; <br /> endif; <br /><br /> return bResult; <br />end; </code><br />
<br />
Oprócz ścieżki instalacyjnej (<i>Path</i>) , funkcja zwraca nazwę produktu (<i>Name</i>) i wersję (<i>Version</i>)Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-91596494122505996272012-07-02T18:52:00.003+02:002012-07-02T18:52:39.460+02:00Walidacja numeru Dowodu Osobistego w c#Funkcja walidująca numer dowodu osobistego w c# wraz z formatowaniem.<br />
Funkcja oparta o sumę kontrolną<br />
<br />
<code>
/// <summary><br />/// Weryfikacja Nr Dowowdu Osobistego<br />/// </summary><br />/// <param name="szNR">Nr Dowodu</param><br />/// <param name="retFormated">Czy zwracać numer w postaci sformatowanej</param><br />/// <returns>true/false</returns><br />public static bool ValidateDO(ref string szNR, bool retFormated = true)<br />{<br /> byte[] tab = new byte[9] { 7, 3, 1, 9, 7, 3, 1, 7, 3 };<br /> byte[] tablicz = new byte[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }; <br /> <br /> bool bResult = false;<br /> int sumcontrol = 0;<br /> int sum = 0;<br /><br /> szNR = szNR.Trim().Replace(" ", "");<br /> <br /> if (szNR.Length == 9)<br /> { <br /> byte b;<br /> <br /> for (int i = 0; i < 3; i++)<br /> {<br /> b = Convert.ToByte(szNR[i]);<br /> if (b < 65 || b > 90) return false;<br /> }<br /> for (int i = 3; i < 9; i++)<br /> {<br /> b = Convert.ToByte(szNR[i]);<br /> if (b < 48 || b > 57) return false;<br /> }<br /> <br /> sumcontrol = Convert.ToInt32(szNR[3].ToString());<br /><br /> for (int i = 0; i < 9; i++)<br /> {<br /> if (i < 3)<br /> {<br /> sum += (Convert.ToByte(szNR[i]) - 55) * tab[i];<br /> }<br /> else<br /> {<br /> sum += Convert.ToInt32(szNR[i].ToString()) * tab[i];<br /> }<br /> }<br /><br /> bResult = ((sum % 10) == 0);<br /><br /> }<br /> else return false;<br /><br /> if (bResult && retFormated)<br /> {<br /> szNR = szNR.Insert(3, " "); <br /> }<br /><br /> return bResult;<br />} </code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-35406309031880375252012-07-02T18:49:00.000+02:002012-07-02T18:49:06.049+02:00Walidacja numeru konta bankowego w c#Poniżej przedstawiam funkcję walidującą numer konta bankowego zarówno przyjętego w Polsce 26 i 28 znakowy.<br />
Funkcja może zwrócić podany numer w postaci sformatowanej tj ze spacjami.<br />
<br />
<code>
/// <summary><br />/// Walidacja numeru bankowego<br />/// </summary><br />/// <param name="szNR">weryfikowany numer</param><br />/// <param name="retFormated">Czy zwracać numer w postaci sformatowanej</param><br />/// <returns>true/false</returns><br />public static bool ValidateIBAN_NRB(ref string szNR, bool retFormated = true)<br />{<br /> bool bResult = false;<br /><br /> szNR = szNR.Trim()<br /> .Replace(" ", "")<br /> .Replace("-", "");<br /> <br /> if (szNR.Length == 26 || szNR.Length == 28)<br /> {<br /> string nr = szNR;<br /> if (nr.Length == 26)<br /> {<br /> nr = (nr +"PL"+ nr.Substring(0, 2)).Remove(0, 2);<br /> }<br /> else<br /> {<br /> nr = (nr + nr.Substring(0, 4)).Remove(0, 4);<br /> }<br /><br /> nr = nr.Replace("P", "25").Replace("L", "21");<br /><br /> String nr6 = nr.Substring(0, 6);<br /> String nr12 = nr.Substring(6, 6);<br /> String nr18 = nr.Substring(12, 6);<br /> String nr24 = nr.Substring(18, 6);<br /> String nr30 = nr.Substring(24);<br /><br /> int r = Convert.ToInt32(nr6) % 97;<br /> nr12 = (r > 0 ? r.ToString() : "") + nr12;<br /> r = Convert.ToInt32(nr12) % 97;<br /> nr18 = (r > 0 ? r.ToString() : "") + nr18;<br /> r = Convert.ToInt32(nr18) % 97;<br /> nr24 = (r > 0 ? r.ToString() : "") + nr24;<br /> r = Convert.ToInt32(nr24) % 97;<br /> nr30 = (r > 0 ? r.ToString() : "") + nr30; <br /><br /> bResult = (Convert.ToInt32(nr30) % 97 == 1);<br /> }<br /> else return false;<br /><br /> if (bResult && retFormated)<br /> {<br /> if (szNR.Length==26)<br /> {<br /> szNR = szNR.Insert(22, " ").Insert(18, " ").Insert(14, " ").Insert(10, " ").Insert(6, " ").Insert(2, " ");<br /> }<br /> else<br /> {<br /> szNR = szNR.Insert(24, " ").Insert(20, " ").Insert(16, " ").Insert(12, " ").Insert(8, " ").Insert(4, " ");<br /> }<br /> }<br /><br /> return bResult;<br />} </code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-19087362202535291612012-07-02T18:42:00.003+02:002012-07-02T18:42:54.819+02:00Walidacja numeru Regon w c#Funkcja walidująca numer Regon w c# zarówno 9-cio jak i 14 cyfrowy.<br />
Walidacja na podstawie sumy kontrolnej jak oraz długości ciągu cyfr.<br />
Funkcja zwrac <i>true </i>w przypadku poprawnego numeru<br />
<br />
<code>public static bool ValidateRegon(ref string szRegon)<br />{<br /> byte[] tab8 = new byte[8] { 8, 9, 2, 3, 4, 5, 6, 7 };<br /> byte[] tab13 = new byte[13] { 2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8 };<br /> byte[] tablicz = new byte[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 };<br /> bool bResult = false;<br /> int suma = 0;<br /> int sumcontrol = 0;<br /><br /> szRegon = szRegon.Trim();<br /><br /> if ((szRegon.Length == 9)||(szRegon.Length==14))<br /> {<br /> foreach (char l in szRegon)<br /> {<br /> byte b = Convert.ToByte(l);<br /> if (Array.IndexOf(tablicz, Convert.ToByte(l)) == -1) return false;<br /> }<br /><br /> sumcontrol = Convert.ToInt32(szRegon[(szRegon.Length==9)?8:13].ToString());<br /><br /> for (int i = 0; i < ((szRegon.Length==9)?8:13); i++)<br /> {<br /> suma += ((szRegon.Length==9)?tab8[i]:tab13[i]) * Convert.ToInt32(szRegon[i].ToString());<br /> }<br /><br /> bResult = ( (((suma % 11)!=10)?(suma % 11):0) == sumcontrol);<br /> }<br /> else return false;<br /> <br /> return bResult;<br />} </code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-89193886631576246812012-07-02T18:38:00.001+02:002012-07-02T18:38:16.499+02:00Walidacja numeru NIP w c#Funkcja walidująca numer NIP w c# wraz z formatowaniem.<br />
<br />
<code>
/// <summary><br />/// Walidacja NIP<br />/// </summary><br />/// <param name="szNIP"></param><br />/// <param name="retFormated"> Zwracany NIP jest w postaci sformatowanej</param><br />/// <returns>zwraca true/false</returns></code><br />
<code><br />public static bool ValidateNIP(ref string szNIP, bool retFormated = true)<br />{<br /> byte[] tab = new byte[9] { 6, 5, 7, 2, 3, 4, 5, 6, 7 };<br /> byte[] tablicz = new byte[] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 };<br /> bool bResult = false;<br /> int suma = 0;<br /> int sumcontrol = 0;<br /><br /> szNIP = szNIP.Replace("-", "");<br /> szNIP = szNIP.Trim();<br /><br /> if (szNIP.Length == 10)<br /> {<br /> foreach (char l in szNIP)<br /> {<br /> byte b = Convert.ToByte(l);<br /> if (Array.IndexOf(tablicz, Convert.ToByte(l)) == -1) return false;<br /> }<br /><br /> sumcontrol = Convert.ToInt32(szNIP[9].ToString());<br /><br /> for (int i = 0; i < 9; i++)<br /> {<br /> suma += tab[i] * Convert.ToInt32(szNIP[i].ToString());<br /> }<br /><br /> bResult = ((suma % 11) == sumcontrol); <br /> }<br /> else return false;<br /><br /> if (bResult && retFormated)<br /> {<br /> szNIP = szNIP.Insert(8, "-")<br /> .Insert(6, "-")<br /> .Insert(3, "-"); <br /> }<br /><br /> return bResult;<br />}
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-73218715280890202792012-07-02T18:32:00.001+02:002013-12-19T08:59:36.824+01:00Walidacja numeru Pesel w C#Przedstawiam funkcje walidującą numer <i>PESEL</i>.<br />
Funkcja sprawdza sumę kontrolną numeru, długość oraz logiczność.<br />
Zakres sprawdzanych numerów dat w Peselu od 1800 do 2200 (w przybliżeniu) <br />
Zwraca <i>true </i>- w przypadku poprawnego numeru.<br />
<br />
<code>
public static bool ValidatePesel(ref string szPesel)<br />{ <br />byte[] tab = new byte[10] { 9, 7, 3, 1, 9, 7, 3, 1, 9, 7 };<br />byte[] tablicz = new byte[] {48,49,50,51,52,53,54,55,56,57}; <br />bool bResult = false;<br />int suma = 0;<br />int sumcontrol = 0;<br /> <br />szPesel = szPesel.Trim();<br /><br />if (szPesel.Length == 11)<br />{<br /> foreach (char l in szPesel)<br /> {<br /> byte b = Convert.ToByte(l);<br /> if (Array.IndexOf(tablicz,Convert.ToByte(l)) == -1) return false;<br /> }<br /> <br /> sumcontrol = Convert.ToInt32(szPesel[10].ToString());<br /><br /> for (int i = 0; i < 10; i++)<br /> {<br /> suma += tab[i] * Convert.ToInt32(szPesel[i].ToString());<br /> }<br /><br /> bResult = ((suma % 10) == sumcontrol); <br /> <br /> if (bResult)<br /> {<br /> int rok = 0;<br /> int mies = 0;<br /> int dzien = Convert.ToInt32(szPesel[4].ToString()) * 10 + Convert.ToInt32(szPesel[5].ToString());<br /><br /> if (szPesel[2] == '0' || szPesel[2] == '1')<br /> {<br /> rok = 1900;<br /> mies = Convert.ToInt32(szPesel[2].ToString()) * 10 + Convert.ToInt32(szPesel[3].ToString());<br /> }<br /> else if (szPesel[2] == '2' || szPesel[2] == '3')<br /> {<br /> rok = 2000;<br /> mies = (Convert.ToInt32(szPesel[2].ToString()) * 10 + Convert.ToInt32(szPesel[3].ToString()) - 20);<br /> }<br /> else if (szPesel[2] == '4' || szPesel[2] == '5')<br /> {<br /> rok = 2100;<br /> mies = (Convert.ToInt32(szPesel[2].ToString()) * 10 + Convert.ToInt32(szPesel[3].ToString()) - 40);<br /> }<br /> else if (szPesel[2] == '6' || szPesel[2] == '7')<br /> {<br /> rok = 2200;<br /> mies = (Convert.ToInt32(szPesel[2].ToString()) * 10 + Convert.ToInt32(szPesel[3].ToString())-60);<br /> }<br /> else if (szPesel[2] == '8' || szPesel[2] == '9')<br /> {<br /> rok = 1800;<br /> mies = (Convert.ToInt32(szPesel[2].ToString()) * 10 + Convert.ToInt32(szPesel[3].ToString())-80);<br /> }<br /> rok += Convert.ToInt32(szPesel[0].ToString()) * 10 + Convert.ToInt32(szPesel[1].ToString());<br /> String szDate = rok.ToString() + "-" + (mies < 10 ? "0" + mies.ToString() : mies.ToString()) + "-" + (dzien < 10 ? "0" + dzien.ToString() : dzien.ToString());<br /> DateTime dt;<br /> bResult = DateTime.TryParse(szDate, out dt);<br /> }<br />}<br />else return false;<br /> <br />return bResult;<br />} </code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com3tag:blogger.com,1999:blog-1707704340105849958.post-44901474818391516962012-07-02T15:24:00.002+02:002012-07-02T15:24:40.434+02:00Weryfikacja numeru pesel w MFC C++Dzisiaj prezentuję funkcję weryfikującą numer Pesel.<br />
Funkcja sprawdza zgodność numerów pesel z zakresu 1800 - 2200 roku (w przybliżeniu).<br />
Weryfikowana jest suma kontrolna oraz logika zapisu samego numeru pesel.<br />
Funkcja zwraca true - jeśli numer pesel jest poprawny, false jeśli błędny.<br />
<br />
<code>
BOOL CheckPesel(CString a_Pesel)<br />{<br /> BOOL res=false;<br /> BOOL sumResult = false;<br /> int suma = 0;<br /> int tabSum[] = {1, 3, 7, 9, 1, 3, 7, 9, 1, 3};<br /> CString mDate = "";<br /><br /> if(a_Pesel.GetLength() > 0)<br /> {<br /> for(int i = 0; i < 10; i++)<br /> {<br /> suma += tabSum[i] * stoi(a_Pesel[i]);<br /> }<br /><br /> if ((suma % 10) == 0)<br /> sumResult = ((suma % 10) == stoi(a_Pesel[10]));<br /> else <br /> sumResult = ( (10 - (suma % 10)) == stoi(a_Pesel[10]));<br /> }<br /><br /> if(sumResult){<br /> int year = 0;<br /> int month = 0;<br /> int day = stoi(a_Pesel.Mid(4,2)); <br /><br /> if(a_Pesel[2] == '0' || a_Pesel[2] == '1')<br /> {<br /> year = 1900;<br /> month = stoi(a_Pesel[2]) * 10 + stoi(a_Pesel[3]);<br /> }else if (a_Pesel[2] == '2' || a_Pesel[2] == '3')<br /> {<br /> year = 2000;<br /> month = stoi(a_Pesel[2] - 20) * 10 + stoi(a_Pesel[3]);<br /> }else if (a_Pesel[2] == '4' || a_Pesel[2] == '5')<br /> {<br /> year = 2100;<br /> month = stoi(a_Pesel[2] - 40) * 10 + stoi(a_Pesel[3]);<br /> }else if (a_Pesel[2] == '6' || a_Pesel[2] == '7')<br /> {<br /> year = 2200;<br /> month = stoi(a_Pesel[2] - 60) * 10 + stoi(a_Pesel[3]);<br /> }else if (a_Pesel[2] == '8' || a_Pesel[2] == '9')<br /> {<br /> year = 1800;<br /> month = stoi(a_Pesel[2] - 80) * 10 + stoi(a_Pesel[3]);<br /> }<br /><br /> year += stoi(a_Pesel[0]) * 10 + stoi(a_Pesel[1]);<br /> mDate = itos(year) + "-" + itos(month) + "-" + itos(day);<br /> COleDateTime tm;<br /> res=tm.ParseDateTime(mDate);<br /><br /> }else{ <br /> AfxMessageBox("Nieprawidłowy numer Pesel");<br /> return false;<br /> }<br /><br /> return res;<br />}<br /><br />
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-34112897191364501822012-07-02T15:16:00.000+02:002012-07-02T15:16:50.421+02:00Hex to IntProsta funkcja konwertująca Hex CString na Int<br />
<code>int hstoi(CString hexString)<br />{<br /> int value = 0;<br /> CString hex = "0123456789ABCDEF";<br /><br /> hexString.MakeUpper();<br /><br /> for(int i = 0; i<hexString.GetLength(); i++)<br /> {<br /> value=(value*16) + hex.Find(hexString.GetAt(i));<br /> }<br /> return value;<br />}<hexstring.getlength(); +="" <="" code="" hex.find(hexstring.getat(i));="" i++)="" return="" value;="" value="(value*16)" {="" }=""></hexstring.getlength();></code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-17497840925211038942012-07-02T15:12:00.002+02:002012-07-02T15:12:29.435+02:00CString to IntProsta funkcja konwertująca CString na Int<br />
<code>
int stoi(CString a_Str)
{ </code><br />
<code>int res = INT_MIN; </code><br />
<code>try
{
res = atoi( a_Str );
} </code><br />
<code>catch(CException * e) </code><br />
<code>{
e = e;
} </code><br />
<code>return res;
}
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-74099376064416222282012-07-02T15:00:00.001+02:002012-07-02T15:00:40.423+02:00Int to CStringProsta funkcja zwracająca CString przy konwersji int<br />
<code>
CString itos(const int aInt)
{
char buf[20];
return _itoa( aInt, buf, 10 );
}
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-42679708058390431262012-06-29T13:44:00.000+02:002012-06-29T14:02:02.110+02:00Tworzenie Upgrade do projektu Basic MSI w Install Shield 2008 Tworzenie upgrade do projektu MSI należy zaplanować już przy tworzeniu instalatra MSI.<br />
Jeżeli zakładamy,że nasz projekt będzie upgradowany a zazwyczaj tak jest, to musimy wykonać pewne kroki na początku. Najważniejszą rzeczą do wykonania jest ustawienie wersji produktu "<i>Version</i>" w "<i>Product properties</i>" na drzewie "<i>General Information</i>". Ustawiamy tutaj wersję, która będzie rozpoznawana przez instalator podczas instalowania Upgrade-u np: 1.0.0000<br />
<br />
<b>Tworzenie Upgrade do istniejącej instalacji MSI. </b><br />
Przy tworzeniu upgrada do istniejącej paczki MSI możemy wykonać tylko <i>Major Upgrade</i>, do wersji Minor Upgrade potrzebny jest plik setup.exe. Dla paczek MSI (<i>Single MSI Image</i>) wykonujemy tylko Major Upgrade.<br />
<br />
<b>Krok 1. Wersja produktu </b><br />
Pierwszą rzeczą, którą powinniśmy zrobić to ustawić nową (nowszą) wersję produktu np: 1.1.0000 (<i>Installation Information->General Information->Product Properties->Version</i>). Zwróć uwagę na właściwość <i>Product Code</i>, <i>Upgrade Code</i>.<br />
Właściwość <i>Upgrade Code</i> musi być taka sama dla całego projektu instalatora. <br />
<br />
<b>Krok 2. Kody produktów</b><br />
Aby nasz Upgrade można było odinstalować i wrócić do poprzedniej wersji należy wygenerować nowy <i>Product Code</i> a także nowy <i>Package Code</i> w "<i>Summary Information Stream</i>".<br />
Nie zmieniamy Upgrade Code!<br />
<br />
<b>Krok 3. Przygotowanie Instalatora do Upgrade</b><br />
Na drzewie Media->Upgrades rozwijamy gałąź "<i>Upgrade Windows Installer Setup</i>" i dodajemy nowy "<i>Major Upgrade Item</i>".<br />
W zakładce "Common" nowego Upgrade wybieramy dla której wersji produktu Upgrade będzie miał zastosowanie:<br />
- dla każdej wcześniejszej (<i>Any earlier version</i>), czy może dla zakresu wersji produktu albo dla wybranej wersji.<br />
<br />
<b>Krok 4. Wymiana plików</b><br />
W tym kroku należy wymień wszystkie pliki które mają być zaktualizowane na wersję użytą w Upgrade.<br />
Ważne. Każdy plik musi posiadać zaszytą nowszą wersje, aby został upgradowany. <br />
<br />
<b>Krok 5. Ustawienia Upgrade.</b><br />
Klikając na drzewo "<i>Upgrade Windows Installer Setup</i>" wyświetlamy właściwości instalacji Upgrade. Mamy 2 opcje do wyboru: Całkowie usunięte starej instalacji i zainstalowanie nowej lub też zainstalowanie Upgrade-u i usunięcie niepotrzebnych plików.<br />
W większości przypadkach zalecana jest opcja pierwsza.<br />
<br />
<b>Krok 6. Budowanie paczki</b><br />
W ostatnim kroku budujemy projekt tworząc nową paczkę MSI typu "<i>MSI Single Image</i>".Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-8679252475739059862012-02-16T12:16:00.001+01:002012-02-16T12:16:52.470+01:00Konwersja IList do DataSet - IList to DataSetPoniżej funkcja konwertująca Ilist-ę do DataSet-a<br />
Param: IList<br />
Return: DataSet<br />
<br />
<code>
public static DataSet ConvertToDataSet<T>(IList<T> list)<br />{<br /> if (list == null || list.Count <= 0)<br /> {<br /> return null;<br /> }<br /> DataSet ds = new DataSet();<br /> DataTable dt = new DataTable(typeof(T).Name);<br /> DataColumn column;<br /> DataRow row;<br /><br /> System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);<br /><br /> foreach (T t in list)<br /> {<br /> if (t == null)<br /> {<br /> continue;<br /> }<br /><br /> row = dt.NewRow();<br /> for (int i = 0, j = myPropertyInfo.Length; i < j; i++)<br /> {<br /> System.Reflection.PropertyInfo pInfo = myPropertyInfo[i];<br /> string name = pInfo.Name;<br /> if (dt.Columns[name] == null)<br /> {<br /> try<br /> {<br /> column = new DataColumn(name, pInfo.PropertyType);<br /> }<br /> catch (NotSupportedException)<br /> {<br /> column = new DataColumn(name, Nullable.GetUnderlyingType(pInfo.PropertyType));<br /> }<br /> catch (Exception)<br /> {<br /> column = new DataColumn(name, typeof(object));<br /> }<br /><br /> dt.Columns.Add(column);<br /> }<br /> row[name] = pInfo.GetValue(t, null);<br /> }<br /> dt.Rows.Add(row);<br /> }<br /> ds.Tables.Add(dt);<br /> return ds;<br />}<br />
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-61798262388880979812012-01-04T09:42:00.000+01:002012-01-04T09:42:03.044+01:00Domyślny parametr funkcji<h3>
Czasami zachodzi potrzeba ustawienie domyślnego parametru przekazywanego funkcji</h3>
Aby to wykonać należy sprawdzić czy parametr został zdefiniowany przy przekazaniu np:<br />
<br />
<code>
function ShowSelected(bCategory)<br />
{<br />
bCategory = typeof(bCategory) != 'undefined' ? bCategory : true; <br />
...<br />
}<br />
</code>
<br />
w tym przypadku domyślny parametr jest typu <b>bool</b> i jeżeli nie został przekazany to domyślną wartością jest <i>true</i>;Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-21774521046061910972011-06-08T13:42:00.001+02:002011-06-08T13:43:06.658+02:00Jak wyświetlić ilość dodanych dzisiaj postów na bloguW sekcji Head szablonu Blogger-a dodajemy funkcję<br />
<code><br />
<script type="text/javascript" ></code><br />
<code>//<![CDATA[</code><br />
<code> function GetCountPostToday(json){<br />
var currDate = new Date();<br />
var CountToday = 0; <br />
var date = currDate.getFullYear()+'-'+((currDate.getMonth()+1)<10 ? '0'+(currDate.getMonth()+1) : (currDate.getMonth()+1))+'-'+(currDate.getDate()<10 ? '0'+currDate.getDate():currDate.getDate()); <br />
for (var i=1; i<=json.feed.entry.length ; i++)<br />
{<br />
if (json.feed.entry[i].published.$t.substring(0,10)==date ) CountToday ++; else break; <br />
} <br />
document.write(CountToday); <br />
}</code><br />
<code>//]]></script></code><br />
<br />
<br />
W szablonie wywołujemy skrypt w miejscu w którym ma być wyświetlona ilość postów publikowanych tego dnia<br />
<code><br />
<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=100&callback=GetCountPostToday"></script><br />
</code><br />
<br />
Pamiętają o zmianie adresu bloga :)<br />
<br />
Rozwiązanie to ma ograniczenie do 100 postów dziennie. Zmieniając parametr <i>max-results</i> określimy ilość sprawdzanych postów (max 500)Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-35089680731968884732011-06-08T13:16:00.004+02:002011-06-08T13:22:18.891+02:00Jak używać JavaScript w szablonie BloggeraAby skorzystać ze skryptu JavasScript w szablonie bloggera, należy skrypt odpowiednio poprzedzić sekcją. Pamiętając o umieszczeniu definicji skryptu w sekcji HEAD<br />
<code><script type="text/javascript"><br />
//<![CDATA[</code><br />
...skrypt...<br />
i zakończyć sekwencją znaków <br />
//]]></script><br />
<br />
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com1tag:blogger.com,1999:blog-1707704340105849958.post-14632681317124560062011-05-26T09:22:00.000+02:002011-05-26T09:22:28.102+02:00Jak ustawić przezroczystość elementów w css<style type="text/css">
.test1 { opacity: .5;}
</style><br />
Przezroczystość elementów na stronie w css najlepiej pokazać na przykładzie.<br />
Oczywiście jest to zależne od przeglądarki. <br />
<br />
<p style="background-color: #6374ab; color: white; padding: 3px; width: 100%;">Test bez użycia przezroczystość<br />
</p><p style="background-color: #6374ab; color: white; opacity: 0.5; padding: 3px; width: 100%;">Test z użyciem przezroczystość</p><br />
<code><style type="text/css"><br />
.test1 { opacity: .5; } //firefox, mozilla,etc.<br />
.test2 { filter: alpha(opacity=50); } //IE 6-7<br />
.test3 { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; } //IE8-9<br />
</style><br />
<br />
</code><br />
Do ustawienie działania w różnych wersjach IE zachowujemy kolejność<br />
<code><br />
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";<br />
filter: alpha(opacity=50);<br />
</code>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com1tag:blogger.com,1999:blog-1707704340105849958.post-54229868490474832042011-05-20T14:00:00.002+02:002011-10-05T07:46:25.336+02:00Dynamiczna, alfabetyczna lista postów blogu jako oddzielna stronaAby utworzyć dynamiczną, alfabetyczną listę postów na blogu należy (krok po kroku):<br />
<ol><li>dodać widget stron do bloggera</li>
<li>utworzyć na blogerze oddzielną stronę np: Spis alfabetyczny</li>
<li>wprowadzić odpowiedni kod funkcji javascript, korzystający z formatu JSON</li>
<li>wstawić skrypt pobierający posty z bloga.</li>
<li>wykonać skrypt wyświetlający listę</li>
</ol>A więc do dzieła. Krok 1,2 pominę gdyż chyba zrozumiałe i pokaże krok 3 i 4<br />
<br />
<b>Krok 3 </b><br />
Tworzymy skrypt js jako treść postu, w tym wypadku strony<br />
<code><br />
<script style="text/javascript"> </code><br />
<br />
Definiujemy tablicę, do której będziemy dodawać posty<br />
<code> var tabentry = new Array();</code><br />
<br />
Teraz funkcję zwrotną odczytującą posty w formacie JSON i zapisującą posty do tablicy<br />
<code> function ListaPostow(json) { <br />
i=0; <br />
while (entry = json.feed.entry[i++])<br />
{<br />
tabentry.length++;<br />
tabentry[tabentry.length-1] = entry;<br />
} <br />
} </code><br />
<br />
Dodajemy funkcję sortującą tablicę postów po tytułach postów<br />
<code>function SortByTitle(a,b) <br />
{<br />
if (b.title.$t==a.title.$t) return 0;<br />
if (a.title.$t>b.title.$t) { return 1; } <br />
else return -1;<br />
}</code><br />
<br />
Na koniec funkcję, która wyświetli nam posortowaną listę postów na stronie.<br />
<code> function ShowListEntry() {<br />
tabentry.sort(SortByTitle); //sortuj tablicę<br />
document.write('<table>');<br />
document.write('<tr><td colspan="2"><ul><h1>Lista alfabetyczna</h1></td></tr>'); <br />
<br />
for (var i = 0 ; i<tabentry.length ; i++) <br />
{<br />
document.write('<tr><td style="padding-right:10px;"><li>');<br />
var posturl; <br />
for (var k = 0; k < tabentry[i].link.length; k++) {<br />
if (tabentry[i].link[k].rel == 'alternate') {<br />
posturl = tabentry[i].link[k].href;<br />
break;<br />
}<br />
} <br />
document.write('<a href="'+posturl+'">');<br />
document.write(tabentry[i].title.$t);<br />
document.write('</a></li></td>');<br />
document.write('<td>(<i>'+ tabentry[i].category[0].term+')</i></td></tr>');<br />
}<br />
document.write('</ul></table>');<br />
} </code><br />
<br />
W tej funkcji wyświetlam listę w postaci tabeli wraz z nazwami przypisanych etykiet do postów.<br />
<br />
Zamykamy znacznik skryptu<br />
<code></script> </code><br />
<br />
<b>Krok 4 </b><br />
Wykonujemy skrypt pobierający listę postów oraz wyświetlamy ją na stronie:<br />
<code><br />
<script src="http://<b>progbis</b>.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=500&callback=ListaPostow"></script></code><br />
Pamiętając o podmianie adresu swojego bloga.<br />
<br />
Skrypt ten działa do 500 postów, gdyż tyle jednorazowo można pobrać. Jeśli macie więcej to należy odpowiednio dopisać.<br />
<code><br />
<script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=501&max-results=500&callback=ListaPostow"></script></code><br />
<br />
i więcej...<code> </code><br />
<code><script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1001&max-results=500&callback=ListaPostow"></script><script>ShowListEntry();</script></code><br />
<br />
<b>Krok 5 </b><br />
Wykonujemy<b> </b>funkcję, która wyświetli nam posortowaną listę postów <br />
<code><script>ShowListEntry();</script></code><br />
<br />
Jak to działa? Sprawdźcie listę wg kategorii na moim blogu<br />
Więcej informacji o formacie JSON i postów bloga znajdziesz pod adresem <a href="http://beautifulbeta.wikidot.com/json-feeds">http://beautifulbeta.wikidot.com/json-feeds</a>Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com1tag:blogger.com,1999:blog-1707704340105849958.post-56272312523923415762011-05-19T11:38:00.000+02:002011-05-19T11:38:55.858+02:00Jak wyświetlić ilość postów i komentarzy na bloguJeśli chcesz aby na twoim blogu pojawiła się informacja o tym ile zmieściłeś postów oraz ile dodano komentarzy, należy posłużyć się javascipt-em i formatem JSON.<br />
Skrypt najlepiej umieścić w widgecie, w którym informacji o ilości postów czy komentarzy będzie wyświetlana.<br />
<code><br />
<script style="text/javascript"><br />
function numposts(json) {<br />
document.write('Ten blog opublikował ' + json.feed.openSearch$totalResults.$t + ' postów');<br />
}<br />
function numcomments(json) {<br />
document.write(' oraz ' + json.feed.openSearch$totalResults.$t + ' komentarzy');<br />
}</script><br />
</code><br />
<br />
Po czym umieścić w miejscu w którym wyświetlić informację wywołanie skryptu<br />
<code><br />
</code><code class="codebox"><script src="http://progbis.blogspot.com/feeds/posts/default?alt=json-in-script&callback=numposts"></script><script src="</code><code class="codebox">http://progbis.blogspot.com</code><code class="codebox"><span style="color: red;"></span>/feeds/comments/default?alt=json-in-script&callback=numcomments"></script></code><br />
<br />
pamiętając o podmianie adresu twojego bloga.Przemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com0tag:blogger.com,1999:blog-1707704340105849958.post-89870487025177144992011-04-28T15:21:00.000+02:002011-04-28T15:21:05.202+02:00Richtextbox problem różnych czcionek w c# NetProblem występuje w sytuacji, gdy zaczytujesz z pliku lub wklejasz ze schowka zaznaczony fragment tekstu.<br />
W richtextbox-ie wyświetlane są różne czcionki o różnych wielkościach znaków, szczególnie przy polskich znaków.<br />
Aby temu zapobiec należy bezpośrednio w designerze dopisać linijkę przed ustawieniem fontów.<br />
<br><br />
<code>this.richTextBox1.LanguageOption = System.Windows.Forms.RichTextBoxLanguageOptions.AutoKeyboard;</code><br><br />
i problem znikaPrzemashttp://www.blogger.com/profile/14416747202328098016noreply@blogger.com1