Mar 22

一直觉得MAXTHON自带的快速启动才9个格子太少.网上一搜,有人说可以用收藏夹,但是收藏夹如硬盘,快速启动如内存,这2个东西不是一类货.找了一会儿发现原来早就有这类PLUGINS了,一个叫FAST DIAL,一个是SPEED DIAL,不过,在知道FAST DIAL之前,我已经心急装上了SPEED DIAL,所以这里不提FAST DIAL.

这个SPEED DIAL和我想要的结果非常一致,可以有多个页面来存放快速启动项目,每个页面中的快速启动项目数量可以定制,总之很好用.现在,每打开一个新的空白窗口,都会出现SPEED DIAL让我选择.

在安装好SD以后,一定要记得进入MAXTHON的SETUP CENTER,在ADVANCE中关闭"Enable QuickAccess",并在SD的设置中打开"Show on Blank Page"才行.我刚开始时只在MAXTHON的快速启动页中点击了"HIDE QUICK ACCESS"结果空白页就是空白页,SD就是不出来,郁闷得要命,后来才发现必须要在ADVANCE中关闭才是真关了.

SD3.0据说是全重写的,速度很快.使用下来的感觉的确要比MAXTHON原配的要快.

Mar 21

有需要在messageBox中增加一些内容,比如说,显示一些超链接,显示一个复选框.可是.NET原配的MESSAGEBOX扩展功能有限,找了半天资料也找不到在其基础上的扩展,所以只能自己制作一个了.

今天说第一项.

要在MessageBox中显示含有超链接的文本,最合适的控件是LinkLabel,之前也试过其他的控件,都有问题,比如:

1. RichText,这个只能用来显示RTF格式的文本,即格式化文本,如果要设置字体大小颜色加入图片,用这个合适,但是要内嵌超链接,这个没办法

2. WebBrowser,这个用来显示HTML文件相当好,但是一来我要显示的只是一些小块的文本,没必要用这个大家伙,二来我需要单起一个线程,而WebBrowser不能用在非主线程里.

开始时以为LinkLabel只能显示一个超链接,所以没仔细研究,后来才发现这东东其实威力不小,经过处理能显示带多个超链接的文本,很适合我的需要.

下面的代码是把传入的HTML格式的文本(超链接以<a href="...">XXX</a>格式存在)经过分析后转成LabelLink的方式显示出来.刚写的东西,BUG肯定有,请谅解.

1. 在建立FORM时,新建一个LinkLabel,设置其基本属性如下:

C# Code Copy Code To Clipboard
  1. frmMessage = new LinkLabel();
  2. frmMessage.LinkClicked += new LinkLabelLinkClickedEventHandler(frmMessage_LinkClicked);
  3. frmMessage.Dock = System.Windows.Forms.DockStyle.Top;
  4. frmMessage.AutoSize = true;
  5. frmMessage.Font = new Font("Tahoma", 9, FontStyle.Regular);

2. 注意第2行,在新建LinkLabel时,用户点击内容中的超链接时的响应也需要自行定义.在此,我用System.Diagnostics.Process.Start(target)来启动系统默认的浏览器来查看超链接,不必在其中指定IEXPLORER等.

C# Code Copy Code To Clipboard
  1. static void frmMessage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  2. {
  3. string target = e.Link.LinkData as string;
  4. if (target != null)
  5. {
  6. System.Diagnostics.Process.Start(target);
  7. }
  8. }

3. 那LinkLabel中的内容如何生成呢?我这里是基于从某个固定网页上实时取下来的HTML格式的文本,所以要对这段取下的文本做一点HTML解释才能放到LinkLabel上.

C# Code Copy Code To Clipboard
  1. static private void buildlink(string Message)
  2. {
  3. string sTmpMsg = Message = Message.Replace("<br>", "n").Replace(" ", " ").Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace(""", @"""").Replace("#39;", "'").Replace("&", "&&");
  4. List<string> lLinks = new List<string>();
  5. Regex rWholeLink = new Regex(@"<a href=[wW]+?</a>", RegexOptions.IgnoreCase);
  6. Match mWholeLink = rWholeLink.Match(Message);
  7. if (!mWholeLink.Success)
  8.  
  9. {
  10. frmMessage.Text=Message;
  11. frmMessage.DisabledLinkColor = Color.Black;
  12. frmMessage.LinkBehavior = LinkBehavior.NeverUnderline;
  13. frmMessage.Links[0].Enabled = false;
  14. return;
  15. }
  16.  
  17.  
  18. while (mWholeLink.Success)
  19. {
  20. Regex rLink = new Regex(@"<a href=""[wW]+?"">", RegexOptions.IgnoreCase);
  21. Regex rText = new Regex(@">[wW]+?</a>", RegexOptions.IgnoreCase);
  22. Match mLink = rLink.Match(mWholeLink.Value.ToString());
  23. if (mLink.Success)
  24. {
  25.  
  26. Match mText = rText.Match(mWholeLink.Value.ToString(), mLink.Index);
  27. if (mText.Success)
  28. {
  29. string sLink = mLink.Value.ToString(); sLink = sLink.Substring(9, sLink.Length - 11).Replace("&&", "&");
  30. string sText = mText.Value.ToString(); sText = sText.Substring(1, sText.Length - 5);
  31. lLinks.Add(sLink + "#|||#" + sText);
  32. sTmpMsg = rWholeLink.Replace(sTmpMsg, sText, 1);
  33. }
  34. }
  35. mWholeLink = mWholeLink.NextMatch();
  36. }
  37. frmMessage.Text = sTmpMsg;
  38. foreach (string s in lLinks)
  39. {
  40. try
  41. {
  42. string slink = s.Substring(0, s.IndexOf("#|||#"));
  43. string stext = s.Substring(s.IndexOf("#|||#") + 5, s.Length - s.IndexOf("#|||#") - 5);
  44. frmMessage.Links.Add(frmMessage.Text.IndexOf(stext), stext.Length, slink);
  45. }
  46. catch
  47. {
  48. }
  49. }
  50. newMessageBox.Height = frmMessage.Height + 100;
  51. }

这段代码粘贴上来有点乱,不知为什么总是无法使用C#格式放上来,只能如此了。总而言之其作用是把带<a href="...">XXX</a>超链接格式的文本转换成普通文本,并按LinkLabel的使用方式在其中添加Links[]。

稍后继续。。。

Mar 18
C# Code Copy Code To Clipboard
  1. Thread myThread = new Thread(new ThreadStart(delegate { myThreadAction(Param1, Param2, Param3); }));   
      
  2. myThread.Start();   

很简单吧

Tags: , ,
Mar 17

WRT310N V2 升级DD-WRT 不指定

kcao , 09:42 , 技术 , 评论(0) , 引用(0) , 阅读(6296) , Via 本站原创

1. 先根据DDWRT官网上的方法,用30-30-30方式RESET路由器后刷DDWRT,但都报错说文件非法,奇怪,再用LINKSYS的界面升级DD-WRT MINI. 先想升级DD-WRT的STD,但是说不行,升级FAILED. 所以只能用MINI进行升级, UPLOAD SUCCESSFUL以后,过了很久网页变为不可用,等3分钟.

2. 再开机,发现糟糕.LED灯只有连接的3号网口亮,连POWER灯都灭了.计算机PING 192.168.1.1不通,改计算机IP地址为192.168.1.100后PING也不通.机器变砖...哭...

3. 用30-30-30方式RESET路由器,还好这界面还是有的.去LINKSYS官网下载了原厂固件,用此界面刷入.成功.还好,机器回生了.

4. 仔细查看后发现,原来刷入的DDWRT是给V1版的WRT310N的,应该是这个原因导致的失败,继续下载最新版的DDWRT,注意是要给V2版用的,最新的是2011年2月编译的SP2版,用FTP可以在DDWRT官网下载到.

5. 在LINKSYS的界面中刷DDWRT,继续出失败消息"FAILED""FAILED"...下载了老的SP1稳定版也是一样失败.用30-30-30 RESET路由器后刷,报错不是合法的IMAGE.刷DDWRT不成功.郁闷.

6. 停止使用IE,改用CHROME打开LINKSYS界面刷DDWRT,用SP2的最新编译的MINI版...成功了!

7. 想偷懒把原来WRT54GL中的配置文件导出再导入到WRT310N中,结果又一次导致机器变砖.看来只能自己手动配置了.

8. 再用30-30-30方式后直接用CHROME刷DDWRT,也成功了.然后手动配置路由器,累是累点,没办法.

重新设好网络,用T410测试速度(SPEEDTEST.NET),达到20M!很不错,下面就要花时间看WRT310N的稳定性了.

3/17,在EBAY上买了个INTEL 5100的N速网卡,准备给老机I6400换上提速.

看起来,在LINUX平台上,IE还是问题多多,这不,费了那么多事,换成CHROME就可以.我没试FIREFOX,估计那也成.

 

 

Tags: , , , , , , , , ,
Mar 14
Copy Code To Clipboard
  1. { Getting the Windows Directory }    
  2.   
  3. function GetWinDir: string;    
  4. var    
  5.   dir: array [0..MAX_PATH] of Char;    
  6. begin    
  7.   GetWindowsDirectory(dir, MAX_PATH);    
  8.   Result := StrPas(dir);    
  9. end;    
  10.   
  11. function WindowsDirectory: string;    
  12. var    
  13.   WinDir: PChar;    
  14. begin    
  15.   WinDir := StrAlloc(MAX_PATH);    
  16.   GetWindowsDirectory(WinDir, MAX_PATH);    
  17.   Result := string(WinDir);    
  18.   if Result[Length(Result)] <> '\' then    
  19.     Result := Result + '\';    
  20.   StrDispose(WinDir);    
  21. end;    
  22.   
  23. function GetWindowsDirectory(var S: String): Boolean;    
  24. var    
  25.   Len: Integer;    
  26. begin    
  27.   Len := Windows.GetWindowsDirectory(nil, 0);    
  28.   if Len > 0 then    
  29.   begin    
  30.     SetLength(S, Len);    
  31.     Len := Windows.GetWindowsDirectory(PChar(S), Len);    
  32.     SetLength(S, Len);    
  33.     Result := Len > 0;    
  34.   end else    
  35.     Result := False;    
  36. end;    
  37. { Getting the System Directory }    
  38.   
  39. function SystemDir: string;    
  40. var    
  41.   dir: array [0..MAX_PATH] of Char;    
  42. begin    
  43.   GetSystemDirectory(dir, MAX_PATH);    
  44.   Result := StrPas(dir);    
  45. end;    
  46.   
  47. function SystemDirectory: string;    
  48. var    
  49.   SysDir: PChar;    
  50. begin    
  51.   SysDir := StrAlloc(MAX_PATH);    
  52.   GetSystemDirectory(SysDir, MAX_PATH);    
  53.   Result := string(SysDir);    
  54.   if Result[Length(Result)] <> '\' then    
  55.     Result := Result + '\';    
  56.   StrDispose(SysDir);    
  57. end;    
  58.   
  59. function GetSystemDirectory(var S: String): Boolean;    
  60. var    
  61.   Len: Integer;    
  62. begin    
  63.   Len := Windows.GetSystemDirectory(nil, 0);    
  64.   if Len > 0 then    
  65.   begin    
  66.     SetLength(S, Len);    
  67.     Len := Windows.GetSystemDirectory(PChar(S), Len);    
  68.     SetLength(S, Len);    
  69.     Result := Len > 0;    
  70.   end else    
  71.     Result := False;    
  72. end;    
  73. { Getting the Temporary Directory }    
  74.   
  75. function GetTempDir: string;    
  76. var    
  77.   Buffer: array[0..MAX_PATH] of Char;    
  78. begin    
  79.   GetTempPath(SizeOf(Buffer) - 1, Buffer);    
  80.   Result := StrPas(Buffer);    
  81. end;    
  82.   
  83. function GetTempPath: string;    
  84. var    
  85.   TmpDir: PChar;    
  86. begin    
  87.   TmpDir := StrAlloc(MAX_PATH);    
  88.   GetTempPath(TmpDir, MAX_PATH);    
  89.   Result := string(TmpDir);    
  90.   if Result[Length(Result)] <> '\' then    
  91.     Result := Result + '\';    
  92.   StrDispose(TmpDir);    
  93. end;    
  94.   
  95. function GetTempPath(var S: String): Boolean;    
  96. var    
  97.   Len: Integer;    
  98. begin    
  99.   Len := Windows.GetTempPath(0, nil);    
  100.   if Len > 0 then    
  101.   begin    
  102.     SetLength(S, Len);    
  103.     Len := Windows.GetTempPath(Len, PChar(S));    
  104.     SetLength(S, Len);    
  105.     Result := Len > 0;    
  106.   end else    
  107.     Result := False;    
  108. end;    
  109.   
  110. procedure TForm1.Button1Click(Sender: TObject);    
  111. begin    
  112.   label1.Caption := GetWinDir;    
  113.   label2.Caption := GetSysDir;    
  114.   label3.Caption := GetTempDir;    
  115. end;   

 

Tags: , , ,
分页: 7/20 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]