首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

很希望大家把自己做项目中的小技巧共享出来解决方案

2012-02-14 
很希望大家把自己做项目中的小技巧共享出来很久没有在CSDN首页看到Delphi的技术分享贴了,大家努力啊~[解决

很希望大家把自己做项目中的小技巧共享出来
很久没有在CSDN首页看到Delphi的技术分享贴了,大家努力啊~


[解决办法]
不错~板凳~~
[解决办法]
不错~地板~~
[解决办法]
使用bcb6开发,开发包提供的是vc6开发的dll和lib文件,使用bcb6 bin目录下的工具:coff2omf a.lib b.lib
将库文件a.lib转换格式生成库文件b.lib
coff2omf可以转换微软的COFF格式为Borland使用的OMF格式
在bcb6中导入即可直接调用了!

另外:tdump -ee mydll.dll >1.txt
研究一下别的程序或者dll里边调用了什么函数

[解决办法]
D7以上版本的indy提供的IdStrings.pas里面有几个很有用处的字符处理函数

[解决办法]
不错
[解决办法]
不错,呵呵
[解决办法]
我来顶了~~~呵呵,接点分
[解决办法]
呵呵,偶以前提过这样的问题,结果也是没有多少人参与
[解决办法]
up,go on study!
[解决办法]
友情关注。
[解决办法]
向前拱
[解决办法]
up, 偶先想想再回。
[解决办法]
up
[解决办法]
上首页了,过来看看...
[解决办法]
我认为自己最能拿出手的东西,
可以做个基类使用,主要功能就是是子类的用户输入控件可以自动变色,
不必考虑种类繁多的第三方控件,
只要是有Color,OnEnter,OnExit,OnChange属性就行。
unit Ufrmbase;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,typinfo;
type
Tfrmbase = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure CmpEnter(Sender: TObject); //用户获得焦点
procedure CmpExit(Sender: TObject); //用户失去焦点
public
{ Public declarations }
protected
procedure pSetComponents;
end;

var
frmbase: Tfrmbase;
//以后应该是可以设置的。风格管理,可以保存在注册表中
const
ENTERC0LOR = $00CDBDB4;
EXITCOLOR = $00DAF3DD;
implementation
{$R *.dfm}
procedure Tfrmbase.CmpEnter(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, ENTERC0LOR);
end;

procedure Tfrmbase.CmpExit(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, EXITCOLOR);
end;

procedure Tfrmbase.pSetComponents;
var
i: Integer;
sColor, sEnter, sExit, sChanged: PPropInfo;
vEnter, vExit: TMethod;
mEvent: TNotifyEvent;
begin
for i := 0 to componentcount - 1 do
begin
sColor := GetPropInfo(Components[i].ClassInfo, 'Color');
sEnter := GetPropInfo(Components[i].ClassInfo, 'OnEnter');
sExit := GetPropInfo(Components[i].ClassInfo, 'OnExit');
sChanged := GetPropInfo(Components[i].ClassInfo, 'OnChange');
if (sChanged <> nil) and (sEnter <> nil) and
(sExit <> nil) and (sColor <> nil) then
begin
SetOrdProp(Components[i], sColor, EXITCOLOR);


mEvent := CmpEnter;
vEnter.Code := @mEvent;
vEnter.Data := Self;
SetMethodProp(Components[i], sEnter, vEnter);
mEvent := CmpExit;
vExit.Code := @mEvent;
vExit.Data := Self;
SetMethodProp(Components[i], sExit, vExit);
end;
end;

end;

procedure Tfrmbase.FormCreate(Sender: TObject);
begin
pSetComponents;
end;
end.
[解决办法]
{$Message Hint '比较好找'}
[解决办法]
不错,顶一下
[解决办法]
帮顶
[解决办法]
先顶上去,待会再共享点东西上来。
[解决办法]
顶先
[解决办法]
mark
[解决办法]
//--------------
如果要在窗体的画布上画图,消除重画时窗体的闪烁,可以在窗体创建时设置双内存机制。
self.doublebuffered:=true;

好处是:重画时(onPain())窗体不会闪烁;
不足是:内存消耗较大;

//--------------
将数据加载到内存时,我们多使用动态数组,动态数组的使用是比较好用的。
1、生存期管理是由编译负责;
2、增加长度时,重新SetLength()不会影响原有的数据;
3、从数组中删除某个元素时,可以采用将数据项向前移的方法,移动完数据后,可以重新分配数组长度(缩短);
4、使用记录类型数据的数组时,可以在记录类型中加入管理方法,实现对记录类型数据中,对象类型数据的管理;







[解决办法]
很难看到了,顶下
[解决办法]
不错,以上还有些好贴,不过,我有一个拼音首字母的用法,大家用过极品时刻表吗?里面就有首字输入法
我有一个单元。
unit IMCode;

interface

function MakeSpellCode(stText: string; iMode, iCount: Integer): string;
{ iMode 二进制功能位说明
X X X X X X X X X X X X X X X X
3 2 1
1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取
2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符)
3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括
(控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符)
}

function GetSpellCode(szText: PChar; iMode, iCount: Integer): PChar; stdcall;

implementation

uses
SysUtils;

type
 { 拼音代码表 }
TPYCode = record
PYCode: string[6];
end;
TFPYCodes = array [1..126, 1..191] of TPYCode;

const
PYMUSICCOUNT = 405;
PyMusicCode: array [1..PYMUSICCOUNT] of string[6] = { 汉字基本发音表 } (
'a', 'ai', 'an', 'ang', 'ao', 'ba', 'bai', 'ban', 'bang', 'bao',
'bei', 'ben', 'beng', 'bi', 'bian', 'biao', 'bie', 'bin', 'bing', 'bo',
'bu', 'ca', 'cai', 'can', 'cang', 'cao', 'ce', 'ceng', 'cha', 'chai',
'chan', 'chang', 'chao', 'che', 'chen', 'cheng', 'chi', 'chong', 'chou', 'chu',
'chuai', 'chuan', 'chuang', 'chui', 'chun', 'chuo', 'ci', 'cong', 'cou', 'cu',
'cuan', 'cui', 'cun', 'cuo', 'da', 'dai', 'dan', 'dang', 'dao', 'de',
'deng', 'di', 'dian', 'diao', 'die', 'ding', 'diu', 'dong', 'dou', 'du',
'duan', 'dui', 'dun', 'duo', 'e', 'en', 'er', 'fa', 'fan', 'fang',
'fei', 'fen', 'feng', 'fu', 'fou', 'ga', 'gai', 'gan', 'gang', 'gao',
'ge', 'ji', 'gen', 'geng', 'gong', 'gou', 'gu', 'gua', 'guai', 'guan',
'guang', 'gui', 'gun', 'guo', 'ha', 'hai', 'han', 'hang', 'hao', 'he',
'hei', 'hen', 'heng', 'hong', 'hou', 'hu', 'hua', 'huai', 'huan', 'huang',
'hui', 'hun', 'huo', 'jia', 'jian', 'jiang', 'qiao', 'jiao', 'jie', 'jin',
'jing', 'jiong', 'jiu', 'ju', 'juan', 'jue', 'jun', 'ka', 'kai', 'kan',
'kang', 'kao', 'ke', 'ken', 'keng', 'kong', 'kou', 'ku', 'kua', 'kuai',
'kuan', 'kuang', 'kui', 'kun', 'kuo', 'la', 'lai', 'lan', 'lang', 'lao',
'le', 'lei', 'leng', 'li', 'lia', 'lian', 'liang', 'liao', 'lie', 'lin',


'ling', 'liu', 'long', 'lou', 'lu', 'luan', 'lue', 'lun', 'luo', 'ma',
'mai', 'man', 'mang', 'mao', 'me', 'mei', 'men', 'meng', 'mi', 'mian',
'miao', 'mie', 'min', 'ming', 'miu', 'mo', 'mou', 'mu', 'na', 'nai',
'nan', 'nang', 'nao', 'ne', 'nei', 'nen', 'neng', 'ni', 'nian', 'niang',
'niao', 'nie', 'nin', 'ning', 'niu', 'nong', 'nu', 'nuan', 'nue', 'yao',
'nuo', 'o', 'ou', 'pa', 'pai', 'pan', 'pang', 'pao', 'pei', 'pen',
'peng', 'pi', 'pian', 'piao', 'pie', 'pin', 'ping', 'po', 'pou', 'pu',
'qi', 'qia', 'qian', 'qiang', 'qie', 'qin', 'qing', 'qiong', 'qiu', 'qu',
'quan', 'que', 'qun', 'ran', 'rang', 'rao', 're', 'ren', 'reng', 'ri',
'rong', 'rou', 'ru', 'ruan', 'rui', 'run', 'ruo', 'sa', 'sai', 'san',
'sang', 'sao', 'se', 'sen', 'seng', 'sha', 'shai', 'shan', 'shang', 'shao',
'she', 'shen', 'sheng', 'shi', 'shou', 'shu', 'shua', 'shuai', 'shuan', 'shuang',
'shui', 'shun', 'shuo', 'si', 'song', 'sou', 'su', 'suan', 'sui', 'sun',
'suo', 'ta', 'tai', 'tan', 'tang', 'tao', 'te', 'teng', 'ti', 'tian',
'tiao', 'tie', 'ting', 'tong', 'tou', 'tu', 'tuan', 'tui', 'tun', 'tuo',
'wa', 'wai', 'wan', 'wang', 'wei', 'wen', 'weng', 'wo', 'wu', 'xi',
'xia', 'xian', 'xiang', 'xiao', 'xie', 'xin', 'xing', 'xiong', 'xiu', 'xu',
'xuan', 'xue', 'xun', 'ya', 'yan', 'yang', 'ye', 'yi', 'yin', 'ying',
'yo', 'yong', 'you', 'yu', 'yuan', 'yue', 'yun', 'za', 'zai', 'zan',
'zang', 'zao', 'ze', 'zei', 'zen', 'zeng', 'zha', 'zhai', 'zhan', 'zhang',
'zhao', 'zhe', 'zhen', 'zheng', 'zhi', 'zhong', 'zhou', 'zhu', 'zhua', 'zhuai',
'zhuan', 'zhuang', 'zhui', 'zhun', 'zhuo', 'zi', 'zong', 'zou', 'zu', 'zuan',
'zui', 'zun', 'zuo', '', 'ei', 'm', 'n', 'dia', 'cen', 'nou',
'jv', 'qv', 'xv', 'lv', 'nv'
);
[解决办法]
xuexi
[解决办法]
JF
[解决办法]
好贴就是要顶啊。
[解决办法]
关注
[解决办法]
好贴就是要顶啊。
[解决办法]
嗯~好贴~加油~
[解决办法]
想把个人一些总结性的东西发上来,无奈提示回复内容太长,mark一下,改天再发。
[解决办法]
顶,
[解决办法]
我也顶一下
[解决办法]
我来凑人头
[解决办法]
板凳
[解决办法]
我来凑个数
我把 fastreport,excel模板文件都存放在数据库里面了,供使用时调用用完删除还可以修改。

var
ts : TStream;
ms : TMemoryStream;
fr : TFastReport;
begin
try
ms := TMemoryStream.Create;
ts:= CreateBlobStream(FieldByName('fileBlob'),bmRead);
ms.CopyFrom(ts, ts.Size);
ms.SaveToFile(ExtractFilePath(Application.ExeName) + filename);
fr.LoadFromFile(ExtractFilePath(Application.ExeName) + filename);
fr.DesignReport;
...

finally
if AsSigned(ms) then ms.Free;
...
end;

end;
[解决办法]
function G_GetSystemDisplay(var mode: TDevMode): boolean; //获取当前显示 


function G_SetSystemDisplay(newMode: TDevMode): Boolean; //动态设置屏幕分辨率 
procedure G_RestoreWindow(hWnd: THandle); //动态设置屏幕分辨率 


希望楼主 天使者 能把这几个函数的代码贴上来
[解决办法]
Delphi早被淘汰了
[解决办法]
顶一下。
[解决办法]
学习

[解决办法]
学习,谢谢各位分享,请问SConnect这个单元的内容是怎么样的?能不能帖出来,还有几个没有帖出来的代码希望“天使者”能补充完整,谢谢
[解决办法]
难得一见,收藏了
[解决办法]
delphi的精神出来了,呵!顶
我是初学者,分享!
[解决办法]
GetLocalIp,不应该只有一个IP,当有多块网卡的时候,这个是不对的。

function GetLocalIpList(var IpList:TStringList):Integer;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
HostName : array [0..MAX_PATH] of char;
NameLen:Integer;
WSData: TWSAData;
lpHostEnt:PHostEnt;
I:Integer;
pptr: PaPInAddr;
begin
Result := 0;
if WSAStartup(MakeWord(2,0), WSData)<>0 then
Exit;
try
NameLen := sizeof(HostName);
fillchar(HostName,NameLen,0);
NameLen:=GetHostName(HostName,NameLen);
if NameLen = SOCKET_ERROR then
Exit;
lpHostEnt := GetHostByName(HostName);
if lpHostEnt = Nil then
Exit;
I := 0;
pPtr := PaPInAddr(lpHostEnt^.h_addr_list);
IpList.Clear;
while pPtr^[I] <> nil do
begin
IpList.ADD( inet_ntoa(pptr^[I]^));
Inc(I);
end;
Result := IpList.Count;
finally
WSACleanup;
end;
end;
[解决办法]
多用BPl是好处多。
[解决办法]
mzfk
[解决办法]
我也来凑一下热闹.
在数据库编程时,我们用adoCommand和adoDataset等时,经常出现错误,提示说"***参数无法找到",这往往是以下几个原因造成的:
1、参数名写错了;
2、参数名前面没有写“:” (我是指动态生成语句时);
3、我经常遇到的:
  就是数据库组件根本没有与数据库或数据库连结组件进行连接。
[解决办法]
我也来贴,
用Delphi时间不是很长,也不敢拿出什么,自己blog里一篇,对有些人可能会有用。
http://blog.csdn.net/goldli/archive/2007/12/06/1921020.aspx
[解决办法]
我只有顶了.

虽然你们贴出来的很多东西看不懂,但是肯定也要顶一下拉
[解决办法]
mark
[解决办法]
Delphi 中用 Xml 配置文档生成 Treeview:
用递归方法,使用 xml 文档生成 Treeview 树形视图。由于是动态生成,所以可以通过修改 xml 的逻辑来定制 Treeview 的结构,
从而实现了 xml 对 Treeview 的动态配置,而不用修改代码。

xml 文件如下:
〈?xml version=“1.0“ encoding=“gb2312“?〉
〈root topic=“频道列表“ catalog=“none“〉

〈channel topic=“操作系统“ catalog=“none“〉
〈channel topic=“Windows频道“ catalog=“windows“ /〉
〈channel topic=“DOS频道“ catalog=“dos“ /〉
〈channel topic=“Linux“ catalog=“linux“ /〉
〈/channel〉

〈channel topic=“菜鸟专区“ catalog=“cainiaozhuanqu“ /〉

〈channel topic=“应用软件“ catalog=“app“ /〉

〈channel topic=“安全专区“ catalog=“safe“ /〉

〈channel topic=“代码实验室“ catalog=“lab“ /〉

〈BBS topic=“电脑学习社区“ catalog=“none“〉


〈subBBS topic=“子社区-1“ catalog=“sub1“ /〉
〈subBBS topic=“子社区-2“ catalog=“sub2“ /〉
〈/BBS〉

〈/root〉

程序代码如下:

unit tree_xml;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, ComCtrls, StdCtrls, XMLDoc, XMLIntf;

type
TForm1 = class(TForm)
TreeView1: TTreeView;
Memo1: TMemo;
Button1: TButton;
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
private
procedure CreateTreeview(XmlNode: IXMLNode; TreeNode: TTreeNode);
{ Private declarations }
public
{ Public declarations }
end;

type
pRec = ^TData;
TData = record
sCatalog: string;
sReserved: String
end;

var
Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.CreateTreeview(XmlNode: IXMLNode; TreeNode: TTreeNode);
var
i: integer;
ParentTreeNode, CurrentTreeNode: TTreeNode;
pData: pRec;
begin
New(pData);
pData^.sCatalog := XmlNode.AttributeNodes[’catalog’].NodeValue;
CurrentTreeNode := TreeView1.Items.AddChildObject(TreeNode,
XmlNode.AttributeNodes[’topic’].NodeValue, pData); //pointer(...)
if XmlNode.HasChildNodes then
begin
ParentTreeNode := CurrentTreeNode;
for i:=0 to XmlNode.ChildNodes.Count-1 do
begin
CreateTreeview(XmlNode.ChildNodes[i], ParentTreeNode);
end;
end;
end;

{------------------------------}
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var pData: pRec;
begin
pData := Treeview1.Selected.Data;
Memo1.Lines.Add(pData^.sCatalog);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
oXml: TXMLDocument;
begin
oXml := TXMLDocument.Create(self);
oXml.FileName := ’_Treeview.xml’;
oXml.Active:=true;
CreateTreeview(oXml.ChildNodes.FindNode(’root’), Treeview1.Items.GetFirstNode);
Treeview1.FullExpand; //节点全部展开
oXml.Free;
end;

end.

注意程序中 Treeview 的 TreeView1.Items.AddChildObject 方法,其最后一个参数用来保存该节点的相关数据,是一个指针类型的数据,使用时要格外小心。本例中,先定义一个记录类型,再定义一个指针指向它,然后作为 AddChildObject 的最后一个参数。记录类型可以保存节点的很多相关参数,本例中只用到了一个,实际使用时可以任意扩充。

---“十万个为什么”电脑学习网-http://www.why100000.com-原创文章
张庆(网眼)2007-10-22
[解决办法]
mark and 3q
[解决办法]
我来顶下~
5555555哪位高手帮忙解决下我的问题啊,对高手来说是小Case!!在我的贴子里,很急的!!!
[解决办法]
MARK
[解决办法]
mark
[解决办法]
up!!!!!!!!
[解决办法]
mark
[解决办法]
初学者,学习,学习
[解决办法]
* kwer
* 码如其人 www.cppblog.com/kwer
* 等 级:


发表于:2007-12-08 15:59:0854楼 得分:0
我来凑个数
我把 fastreport,excel模板文件都存放在数据库里面了,供使用时调用用完删除还可以修改。


---------------------------------------
能否详细点,谢谢!
[解决办法]
做Windows98/2000/XP程序窗口时,如果你选择的字体是宋体,那么在98与2000(或XP)中可能会出现字体大小不一致的情况,就是你在2000下看起来合适,但在98下字体就变小了,在98下调好,在2000下又不合适了。

解决方法是把字体改为:Arial!!!
[解决办法]
收藏
[解决办法]
顶到别人“肺”下来,顶到D上去~
[解决办法]
function TF_public.f_run_one: boolean; //限制程序只能运行一个实例
var
errNO: integer;
hMutex: HWND;
begin
hMutex := CreateMutex(nil, False, pchar(application.title));
errNO := GetLastError;
if errNO = ERROR_ALREADY_EXISTS then
begin //检测是否重复运行
application.MessageBox('本软件只能打开一次,重复运行则其中之一将退出!', pchar(application.title), MB_OK);
application.Terminate;
end;
result := true;
end;
[解决办法]
这种贴子只能收藏,十分感谢以上高手及无私精神
[解决办法]
mark
[解决办法]
自己做一个象bde数据空间的Sql语句生成器 生成Select,update,insert 语句
省区编程时由于sql语句写错产生的错误
[解决办法]
偷偷的顶一下!
(*^__^*) 嘻嘻……

热点排行