02 2009 档案
理顺 JavaScript (12) - 一个比较实用的数组用法
摘要:function Item(id, name) { this.id = id; this.name = name; } var arr = new Array(8); arr[0] = new Item('001', 'AAA'); arr[1] = new Item('002', 'BBB'); arr[2] = new Item('003', 'CCC'); arr[3] = n... 阅读全文
posted @ 2009-02-28 21:33 万一 阅读(1815) 评论(12) 推荐(0) 编辑
理顺 JavaScript (11) - 数组
摘要:数组直接量 var arr; arr = ['AA', 'BB', 'CC']; alert(arr.toLocaleString()); //AA, BB, CC arr = [11, 22, 33]; alert(arr.toLocaleString()); //11.00, 22.00, 33.00 /* 数组元素可以是任意类型, 包括数组本身 */ arr = ['AA', 'BB... 阅读全文
posted @ 2009-02-27 22:24 万一 阅读(1749) 评论(0) 推荐(0) 编辑
用 API 提取、写入指定网站的 Cookie - 回复 "bangrj" 的问题
摘要:问题来源: http://www.cnblogs.com/del/archive/2009/02/27/1399526.html#1463307 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Di... 阅读全文
posted @ 2009-02-27 21:14 万一 阅读(7735) 评论(10) 推荐(0) 编辑
理顺 JavaScript (10) - Math 类
摘要:Math 和其他类不同, 它没有建立方法(不能这样使用: new Math()), 它的所有方法都是静态的(都得挂名调用). Math.abs; //绝对值 Math.max; //两个数中的大者 Math.min; //两个数中的小者 Math.random; //随机数 Math.round; //四舍五入 Math.ceil; //上舍入 Math.floor; ... 阅读全文
posted @ 2009-02-27 16:32 万一 阅读(1689) 评论(0) 推荐(0) 编辑
理顺 JavaScript (9) - Date 类
摘要:常用计时: UTC(世界标准时间)、GMT(格林威治时间)、本地时间. 相关函数纵览 //全局函数 Date //Date 类的静态方法 Date.parse Date.UTC //Date 对象的建立方法 new Date() new Date(毫秒数) new Date(标准时间格式字符串) new Date(年, 月, 日, 时, 分, 秒, 毫秒) //Date 对象的更多方法... 阅读全文
posted @ 2009-02-27 15:16 万一 阅读(2381) 评论(0) 推荐(0) 编辑
获取指定地址的 JPG 图片 - 回复 "bangrj" 的问题
摘要:问题来源: http://www.cnblogs.com/del/archive/2009/02/27/1370907.html#1463071 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, D... 阅读全文
posted @ 2009-02-27 14:12 万一 阅读(3970) 评论(13) 推荐(0) 编辑
理顺 JavaScript (8) - 布尔相关问题
摘要:基本使用 var b; b = true; alert(b); //true b = new Boolean(false); alert(b); //false b = 2 > 1; alert(b); //true b = 2 转换到布尔 var b; b = Boolean(123); alert(b); /... 阅读全文
posted @ 2009-02-26 23:14 万一 阅读(1417) 评论(6) 推荐(0) 编辑
理顺 JavaScript (7) - 数字相关问题
摘要:数字类型变量与数字对象变量 var N, n; N = new Number(123); //数字对象变量 n = 321; //数字类型变量, 也可以使用 Number 类的方法 alert(N); //123 alert(n); //321 有趣的 Number.toString() 方法 var str, n = 65535; str = n.toStr... 阅读全文
posted @ 2009-02-26 21:17 万一 阅读(1585) 评论(0) 推荐(0) 编辑
理顺 JavaScript (6) - 关于字符串的其他问题
摘要:可以使用单引号或双引号 alert("万一的 'Delphi' 博客"); //万一的 'Delphi' 博客 alert('万一的 "Delphi" 博客'); //万一的 "Delphi" 博客 转义字符 /* \x 与 \u 分别跟 2 位和 4 位十六进制数, 可转换为一个字符; ECMAScript 标准不再支持八进制 */ alert('\x41'); /... 阅读全文
posted @ 2009-02-26 17:11 万一 阅读(1825) 评论(19) 推荐(0) 编辑
理顺 JavaScript (5) - 符合 ECMAScript 标准的字符串函数
摘要:这包括: charAt charCodeAt concat fromCharCode //String 类中的唯一静态函数 indexOf lastIndexOf length //String 类中的唯一的属性 localeCompare slice substr substring toUpperCase toLowerCase toLocaleUpperCase toLo... 阅读全文
posted @ 2009-02-26 14:29 万一 阅读(2481) 评论(0) 推荐(0) 编辑
理顺 JavaScript (4) - 变量、常量与数据类型
摘要:var v1 = 123; /* 声明变量、同时初始化为数字 */ var v2 = 'ABC'; /* 声明变量、同时初始化为字符串 */ var v3,v4; /* 已声明还没有初始化的变量, 类型未知(未知也是一种类型: undefined) */ x = 1; y = 2; /* 缺失 var(未声明)的变量也可以使用, 但会让编译器在幕后补充声明; 最好别... 阅读全文
posted @ 2009-02-25 16:26 万一 阅读(3293) 评论(4) 推荐(0) 编辑
理顺 JavaScript (3) - 把 JavaScript 嵌入网页的方法
摘要:JS 代码可以在 head 区或 body 区, 但有些区别. JS 随网页的其他元素顺序载入, 载入后先经过一次语法检查, 然后顺序执行; 如果 JS 中不包含 document.write 或 document.writeln 语句, 写在 head 区比较好, 会先执行. 演示区别: 网页中可以有多个 JS 代码块, 代码块的写法是: (目前常用的) (较新的规定, 旧浏览器未必... 阅读全文
posted @ 2009-02-24 16:21 万一 阅读(3849) 评论(3) 推荐(0) 编辑
理顺 JavaScript (2) - 应先掌握的四个方法
摘要:window.alert("提示文本"); window.confirm('确认吗?'); //返回 true 或 false window.prompt("请输入", "默认值"); //返回输入的值 window.document.write('写入网页的内容'); 先掌握这些命令以便于输出测试结果; 使用时可以省略前面的 "window." ... 阅读全文
posted @ 2009-02-24 14:59 万一 阅读(2437) 评论(2) 推荐(0) 编辑
理顺 JavaScript (1) - 准备工具
摘要:学 JavaScript 第一个头痛的问题就是 IDE, 微软的脚本编辑器还不错, 但好像不能独立安装; 还是自己做一个吧. 下载最简单的 JavaScript 测试工具. 此小工具可能会随时修改(最新修改时间: 2009-2-25 22:07), 下面是目前的效果图及源代码: 代码文件: unit Unit1; interface uses Windows, Messages, ... 阅读全文
posted @ 2009-02-24 13:25 万一 阅读(4367) 评论(6) 推荐(0) 编辑
用 GetEnvironmentVariable 获取常用系统环境变量
摘要:以前曾用 GetWindowsDirectory、GetSystemDirectory、GetTempPath 等函数获取系统常用文件夹;也用过 SHGetSpecialFolderLocation、SHGetPathFromIDList 函数获取过更多常用路径;但这都不如用 GetEnvironmentVariable 获取系统变量来得快.//譬如 %WINDIR% 是表示系统目录的系统变量, ... 阅读全文
posted @ 2009-02-22 23:52 万一 阅读(24285) 评论(3) 推荐(3) 编辑
多线程编程(20) - 展望与阶段性总结
摘要:多线程学习才刚刚入门, 已经学习了线程的建立与同步; 种种原因要先停一停, 还要继续学习的东西有: 更多等待函数 互锁函数 多线程的优先级 线程的亲缘性 线程下的纤程 线程池 多进程编程及作业对象 当然还有 Delphi 提供的 TThread 等方便实用的类. 阅读全文
posted @ 2009-02-22 21:39 万一 阅读(9679) 评论(33) 推荐(0) 编辑
如何把一个文本列表添加到 TListBox 并避免重复项 - 回复 "xnlxw" 的问题
摘要:unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure For... 阅读全文
posted @ 2009-02-22 21:20 万一 阅读(2983) 评论(4) 推荐(0) 编辑
多线程编程(19) - 不使用同步工具, 手动协调线程依次执行
摘要:在前面例子的基础上, 探讨新问题. 假如我们想让几个线程(例子中是 3 个)依次执行, 我们可以使用临界区、信号、互斥等手段; 但下面第一个例子什么同步工具都没用, 也达到了目的; 方法是: 让前一个线程在结束前顺便启动下一个线程. 第二个例子使用了互斥对象配合 WaitForSingleObject 函数, 也达到相似的目的. 效果图(两个例子的效果图差不多, 但第二个例子的执行顺序不好... 阅读全文
posted @ 2009-02-19 23:46 万一 阅读(9388) 评论(12) 推荐(0) 编辑
多线程编程(18) - 再从一个小例子出发
摘要:前面的例子都是让若干线程做同样的事情, 下面这个例子中的三个线程将分别在三个画板上随机画不同颜色的椭圆. 接下来的很多事情我想要基于这个例子来做. 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, D... 阅读全文
posted @ 2009-02-19 21:17 万一 阅读(12637) 评论(18) 推荐(0) 编辑
一个关于 absolute 关键字的小练习
摘要://例子中的三个变量让 absolute 都给弄到一块了, 这有时会很方便; 但我总也想不到用, 还是不熟. procedure TForm1.FormCreate(Sender: TObject); var num: Int64; pt: TPoint absolute num; arr: array[0..1] of Integer absolute pt; begin p... 阅读全文
posted @ 2009-02-19 16:03 万一 阅读(7168) 评论(2) 推荐(1) 编辑
非官方的 TWaitableTimer 类
摘要:unit WTimer;interfaceuses Windows, SysUtils, SyncObjs;type TWaitableTimer = class(TSynchroObject) protected FHandle: THandle; FPeriod: LongInt; FDueTime: TDateTime; FLastError: Integer; FLongTime: ... 阅读全文
posted @ 2009-02-19 15:27 万一 阅读(4766) 评论(3) 推荐(0) 编辑
多线程编程(17) - 多线程同步之 WaitableTimer (等待定时器对象)[续三]
摘要:根据 WaitableTimer 的主要功用, 现在再把它放在 "线程同步" 的话题中讨论有点不合适了, 就要结束它. //重新看看那个 APC 回调函数的格式: procedure TimerAPCProc( lpArgToCompletionRoutine: Pointer; dwTimerLowValue, dwTimerHighValue: DWORD ); stdcall;... 阅读全文
posted @ 2009-02-19 12:19 万一 阅读(6305) 评论(5) 推荐(0) 编辑
多线程编程(16) - 多线程同步之 WaitableTimer (等待定时器对象)[续二]
摘要:喝酒醉了一天, 重装系统一天, 两天没上博客了; 继续学习... 想过没有? WaitableTimer 是在 "定时等待", 前面例子中的 WaitForSingleObject 等待函数 "也在等待", 这就 "双重等待" 了, 这不好, 太浪费资源. 其实作为同步工具, 前面的几种方法(事件、信号、临界区)基本够用了; WaitableTimer 的作用并不是为了重复前面的功能, 它的... 阅读全文
posted @ 2009-02-18 23:43 万一 阅读(7083) 评论(5) 推荐(0) 编辑
多线程编程(15) - 多线程同步之 WaitableTimer (等待定时器对象)[续]
摘要:本次专门研究下 SetWaitableTimer 的第二个参数(起始时间).它有正值、负值、0值三种情况, 前面已用过 0值.先学习负值(相对时间), 也就是从当前算起隔多长时间开始执行.这个相对时间是以 1/100 纳秒为单位的, 譬如赋值 3*10000000 相当于 3 秒.本例效果图:代码文件:窗体文件:当我们需要一个绝对时间时, 譬如 2009-2-18 13:10:5, 函数需要的 Int64 值应该是个 TFileTime 格式的时间.先看三种相关时间类型(TFileTime、TSystemTime、TDateTime)的定义:下面程序指定在 2009年2月18号下午1点10分5 阅读全文
posted @ 2009-02-16 22:58 万一 阅读(6411) 评论(3) 推荐(2) 编辑
多线程编程(14) - 多线程同步之 WaitableTimer (等待定时器对象)
摘要:function CreateWaitableTimer( lpTimerAttributes: PSecurityAttributes; {安全} bManualReset: BOOL; {True: 可调度多个线程; False: 只调度一个线程} lpTimerName: PWideChar {名称} ): THandle; stdcall; {返回句柄} fu... 阅读全文
posted @ 2009-02-16 22:18 万一 阅读(11002) 评论(17) 推荐(2) 编辑
多线程编程(13) - 多线程同步之 Event (事件对象)
摘要:据说 Event(事件对象) 是多线程最原始的同步手段, 我觉得它是最灵活的一个. Event 对象(的句柄表)中主要有两个布尔变量, 从它的建立函数中可以看得清楚: function CreateEvent( lpEventAttributes: PSecurityAttributes; {安全设置} bManualReset: BOOL; ... 阅读全文
posted @ 2009-02-16 00:28 万一 阅读(14098) 评论(15) 推荐(0) 编辑
多线程编程(12) - 多线程同步之 Semaphore (信号对象)
摘要:之前已经有了两种多线程的同步方法: CriticalSection(临界区) 和 Mutex(互斥), 这两种同步方法差不多, 只是作用域不同; CriticalSection(临界区) 类似于只有一个蹲位的公共厕所, 只能一个个地进; Mutex(互斥) 对象类似于接力赛中的接力棒, 某一时刻只能一个人持有, 谁拿着谁跑. 什么是 Semaphore(信号或叫信号量)呢? 譬如到银行办业务... 阅读全文
posted @ 2009-02-14 22:10 万一 阅读(12128) 评论(28) 推荐(3) 编辑
多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
摘要:Mutex 作为系统核心对象是可以跨进程的(临界区就不行), 我们可以利用互斥对象禁止程序重复启动. 工作思路: 先用 OpenMutex 尝试打开一个自定义名称的 Mutex 对象, 如果打开失败说明之前没有这个对象存在; 如果之前没有这个对象, 马上用 CreateMutex 建立一个, 此时的程序应该是第一次启动; 再重复启动时, 那个 OpenMutex 就有结果了, 然后强制退出. ... 阅读全文
posted @ 2009-02-13 23:06 万一 阅读(9472) 评论(11) 推荐(0) 编辑
多线程编程(10) - 多线程同步之 Mutex (互斥对象)
摘要:原理分析: 互斥对象是系统内核对象, 各线程都可以拥有它, 谁拥有谁就能执行; 执行完毕, 用 ReleaseMutex 函数释放拥有权, 以让其他等待的线程使用. 其他线程可用 WaitForSingleObject 函数排队等候(等候也可以理解为排队申请). 使用过程: var hMutex: THandle; {应该先声明一个全局的互斥句柄} CreateMutex ... 阅读全文
posted @ 2009-02-13 21:25 万一 阅读(13908) 评论(33) 推荐(1) 编辑
多线程编程(9) - 认识等待函数 WaitForSingleObject
摘要:一下子跳到等待函数 WaitForSingleObject, 是因为下面的 Mutex、Semaphore、Event、WaitableTimer 等同步手段都要使用这个函数; 不过等待函数可不止 WaitForSingleObject 它一个, 但它最简单. function WaitForSingleObject( hHandle: THandle; {要等待的对象句柄} ... 阅读全文
posted @ 2009-02-13 15:07 万一 阅读(28027) 评论(6) 推荐(2) 编辑
相信吗? 这是一张用 CSS 画出来的图片
摘要:有点大, 进入看吧. 阅读全文
posted @ 2009-02-12 22:21 万一 阅读(5753) 评论(4) 推荐(0) 编辑
多线程编程(8) - 多线程同步之 CriticalSection(临界区)
摘要:先看一段程序, 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; ... 阅读全文
posted @ 2009-02-12 18:15 万一 阅读(18242) 评论(7) 推荐(3) 编辑
Delphi 2009 新增的一个小函数: SysUtils.ByteLength
摘要:procedure TForm1.FormCreate(Sender: TObject); var str: string; begin str := '万一'; ShowMessageFmt('%d, %d', [Length(str), ByteLength(str)]); {2,4} end; 阅读全文
posted @ 2009-02-12 15:04 万一 阅读(7549) 评论(8) 推荐(1) 编辑
多线程编程(7) - 从 CreateThread 说起[续五]
摘要:function CreateThread( lpThreadAttributes: Pointer; {安全设置} dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWORD... 阅读全文
posted @ 2009-02-12 12:31 万一 阅读(12321) 评论(4) 推荐(3) 编辑
多线程编程(6) - 从 CreateThread 说起[续四]
摘要:function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; {堆栈大小} lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWOR... 阅读全文
posted @ 2009-02-11 23:18 万一 阅读(12316) 评论(6) 推荐(2) 编辑
多线程编程(5) - 从 CreateThread 说起[续三]
摘要:function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; {入口函数的指针} lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWO... 阅读全文
posted @ 2009-02-11 16:21 万一 阅读(14494) 评论(10) 推荐(3) 编辑
多线程编程(4) - 从 CreateThread 说起[续二]
摘要:function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; {入口函数的参数} dwCreationFlags: DWORD; var lpThreadId: DWO... 阅读全文
posted @ 2009-02-11 10:42 万一 阅读(16745) 评论(25) 推荐(1) 编辑
多线程编程(3) - 从 CreateThread 说起[续]
摘要:function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; {启动选项} var lpThreadId: DWORD )... 阅读全文
posted @ 2009-02-10 17:48 万一 阅读(21199) 评论(32) 推荐(0) 编辑
多线程编程(2) - 从 CreateThread 说起
摘要:function CreateThread( lpThreadAttributes: Pointer; {安全设置} dwStackSize: DWORD; {堆栈大小} lpStartAddress: TFNThreadStartRoutine; {入口函数} lpParameter: Pointer; ... 阅读全文
posted @ 2009-02-10 16:36 万一 阅读(28498) 评论(6) 推荐(2) 编辑
多线程编程(1) - 先入门再说
摘要:多线程应该是编程工作者的基础技能, 但这个基础对我来讲的确有点难(起码昨天以前是这样). 开始本应该是一篇洋洋洒洒的文字, 不过我还是提倡先做起来, 在尝试中去理解. 先试试这个: procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 500000 do begi... 阅读全文
posted @ 2009-02-05 16:26 万一 阅读(46139) 评论(90) 推荐(7) 编辑
图解 CSS (11): 理解样式表的逻辑
摘要:样式表可以是外部的、内联的或嵌入的; 链接外部样式文件一般是:<link rel="stylesheet" type="text/css" href="xxx.css" media="all"这要写在 Head 标签内, 其内容不区分大小写, 其中的双引号也可以是单引号、也可省略; 逐个解释一下:link: 是 HTML 的常用标签, 它的作用可不仅仅是链接外部样式, 譬如指定地址栏的图标... 阅读全文
posted @ 2009-02-01 22:04 万一 阅读(5718) 评论(7) 推荐(1) 编辑
图解 CSS (10): 链接、继承、放缩、鼠标指针、其他(待补充...)
摘要:a:link {未访问链接}a:hover {鼠标悬停}a:active {鼠标点下}a:visited {已访问链接}很多属性(不是所有)都可以 inherit(继承), 测试: zoom: normal(默认)、比例值.cursor(鼠标指针样式):defaulthandwaithe... 阅读全文
posted @ 2009-02-01 12:24 万一 阅读(2224) 评论(2) 推荐(0) 编辑
图解 CSS (9): 列表
摘要:list-style-type (指定类型) list-style-image (指定图片) list-style-position (指定位置) list-style (综合设置) marker-offset (不支持) 使用 list-style 可单独或综合设置: 类型、图片、位置, 无顺序; 如果同时设置了图片和类型, 图片会替换类型; ... 阅读全文
posted @ 2009-02-01 09:54 万一 阅读(2352) 评论(0) 推荐(0) 编辑