怀念一下这些经常不记得的Delphi代码(转)

 

1.止刷新时闪烁的终极解决办法

{ 防止刷新时闪烁的终极解决办法(对付双缓冲无效时) }
  Perform($000B, 0, 0); //锁屏幕  防止闪烁
// 做一些会发生严重闪烁的事情..
//解锁屏幕并重画
  Perform($000B, 1, 0);
  RedrawWindow(Handle, nil, 0, RDW_FRAME + RDW_INVALIDATE + RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);

2.图片上显示透明文字

//图片上显示透明的文字
//直接用.Canvas.Brush.Style:=bsClear;
//然后.Canvas.TextOut(x,y,’文字显示透明’);
procedure TForm1.Button1Click(Sender: TObject);
var
  bitBuf:TBitmap;
begin
  bitBuf := TBitmap.Create;
try
    bitbuf.LoadFromFile(‘测试图片.bmp’);
    Self.Canvas.Draw(0,0,bitbuf);
    bitbuf.Transparent := True;
    bitbuf.TransparentColor := clWhite;    //文字显示透明
    bitbuf.Canvas.font.color := clBlue;     //文字颜色
    bitbuf.Canvas.TextOut(10,10,’这样就是透明的字了!’);
    Self.Canvas.Draw(0,0,bitbuf);
finally
    bitBuf.Free;
end;
end;

3.取得本机IP地址(精简版)

//取得本地IP地址(精简版)
//注:使用函数前需要 WSAStartup($202, wsdata);
function GetLocalIP(): String;
var
  HostName: array[0..255] of Char;
  HostEnt: PHostEnt;
begin
  Result := ”;
if gethostname(HostName, 255) = 0 then
begin
    HostEnt := gethostbyname(HostName);
    Result := StrPas(inet_ntoa(PInAddr(PInAddr(HostEnt^.h_addr_list)^)^));
end;
end;

继续阅读

unisynedit 在Delphi 2010下的编译问题

官方下载到uniSynedit的压缩包后,只有for2009的版本,用2010打开,也是没有问题的。编译的时候,在SynEditHighlighter.pas报错:

function TSynCustomHighlighter.IsWordBreakChar(AChar: WideChar): Boolean;
begin
  case AChar of
    #0..#32, '.', ',', ';', ':', '"', '''', '?, '`', '?, '^', '!', '?', '&',
    '$', '@', '?, '%', '#', '~', '[', ']', '(', ')', '{', '}', '<', '>',
    '-', '=', '+', '*', '/', '', '|':
      Result := True;
    else
      Result := False;
  end;
end;

就是多出了好几个的?,而无法编译通过。

其实,就是因为这些里面有些utf8字符,而Delphi默认的用cp936的文件格式打开,导致的错误。正确的应该是

function TSynCustomHighlighter.IsWordBreakChar(AChar: WideChar): Boolean;
begin
  case AChar of
    #0..#32, '.', ',', ';', ':', '"', '''', '´', '`', '°', '^', '!', '?', '&',
    '$', '@', '§', '%', '#', '~', '[', ']', '(', ')', '{', '}', '<', '>',
    '-', '=', '+', '*', '/', '', '|':
      Result := True;
    else
      Result := False;
  end;
end;

用正确的代码粘贴修改后,保存,Delphi2010会提示包含utf8字符,是否保存为utf8,选择“是”即可。

继续阅读

ORM for Delphi – Object Relational Mapping / Persistence Frameworks for Delphi

some ORM for Delphi:

hcOPF – an ORM for Delphi

This Open Source Value Type Framework provides a base class (ThcObject) composed of attribute objects that can be automatically persisted to an object store (normally an RDBMS). An object persistence framework is essentially a library of pre-written code that takes care of the details of persisting, or permanently storing an object. The object may be persisted to a text file, XML file etc., but in the business world it will most likely be to an RDBMS and for this reason they are sometimes referred to as an ORM (Object Relational Mapper).

继续阅读

Delphi 中创建无dos窗口console程序

要创建一个console的控制台程序,即无窗体的程序,但是,Delphi默认的console application类型的project,运行的时候,会有一个黑黑的dos窗口。如图:

image

要让程序不显示dos窗口,而在后台运行,方法,就是注释掉“{$APPTYPE CONSOLE}”的程序类型。这样,产生的程序就直接在后台运行,没有dos窗体。

继续阅读

编程调用的mplayer的colorkey设置

Lazarus中调用mplayer播放有个很重要的问题,就是当视频输出为directx时,会无法在panel或者窗体上显示。

原来,这个关系到mplayer的一个参数colorkey,一般调用时传递一个-colorkey 0x101010,然后呢,设置相应的显示视频的窗体颜色为$00101010,这样,窗体就会正常显示视频了。如果colorkey设置为普通的颜色,比如说黑色或者白色,那么许多通常的窗体,都可以看到视频,变成视频有某种透明的效果了。所以,colorkey还是要设置为比较少用的颜色。

lazarus中调用mplayer播放视频

mplayer是一个全能的媒体播放器,在Linux上是鼎鼎大名的,不用多说了,Windows上,现在也是多了很多的基于mplayer的播放器。个人比较喜欢的是smplayer,跨平台的,也是简洁大方。

要在编程中,使用mplayer播放视频,首先要有mplayer的运行库,就是rtm,可以从官方网站下载。解压后的目录结构如下,要包含有可执行的mplayer.exe。

image

然后,使用在project中包含以下文件:cmplayer.pas

继续阅读

在Lazarus和Delphi上使用firefox的gecko内核控件

一般,在delphi上,使用的都是TWebBrowser的IE内核的控件,使用很方便,直接把控件拖到窗体上就行了。但是,在跨平台的时候,就无能为力了。这时候,Lazarus+firefox是个更好的选择。下面,讨论一下,怎么在Lazarus上使用firefox内核打开网页。

首先:准备工作,需要一个firefox的运行库,和一个Lazarus的控件。

1.运行库,就是xulrunner,可以在mozilla的ftp上下载,最新的稳定版上1.9.4,针对不同的平台,有不同的文件。我们就下载win32的sdk文件 xulrunner-1.9.1.4.en-US.win32.zip

image

2.就是Lazarus的控件geckoport

迅雷下载

千脑下载

继续阅读

Lazarus编译RemObjects_Core_Lazarus_Windows.lpk出现错误

用Lazarus编译RemObjects_Core_Lazarus_Windows.lpk出现如下错误的:

RemObjects6RemObjects SDK for DelphiSourceuROXMLSerializer.pas(427,30) Error: Illegal type conversion: "Extended" to "Comp"
  PComp(@ft)^ := {$IFDEF FPC}comp{$ENDIF}((aDateTime – FileTimeBase) * FileTimeStep);

改成:

  PComp(@ft)^ := ((aDateTime – FileTimeBase) * FileTimeStep);

编译成功

【转自】用Lazarus编译RemObjects_Core_Lazarus_Windows.lpk出现如下错误的 |Demos and FAQs – Lazarus中文社区