DELPHI高手请进,TLISTVIEW ONCUSTDRAWITEM的消息(在线等,答完即结帖)

tianxueshan 2006-05-23 03:08:17
本人这两天做了个透明背景的LISTVIEW,目的是可以自由的换取窗体背景图片,手工添加子项时,当窗体显示看不到其子项或者最大化窗体也看不到子项。当点击LISTVIEW 可以看到子项的图标(ONCUSTDRAWITEM里写了代码)是不是因为
在控件的
procedure TRichListview .CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
//Params.ExStyle := Params.ExStyle ;
with Params do
begin
{ 完全重画 }
Style := Style and not WS_CLIPCHILDREN;
Style := Style and not WS_CLIPSIBLINGS;
{ 增加透明 }
ExStyle := ExStyle or WS_EX_TRANSPARENT;
end;
end;


procedure TRichListview.WMNcPaint(var message: Tmessage);
var
Rect: TRect;
begin
Rect := ClientRect;
Rect.Left := Left;
Rect.Right := Left + Width;
Rect.Top := Top;
Rect.Bottom := Top + Height;
Canvas.CopyRect(ClientRect, self.Canvas, Rect);
sendmessage(handle,?????,0,0)?????????????????????????
end;
是不是因为没在此函数中添加重画子项的消息?

...全文
224 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianxueshan 2006-05-23
  • 打赏
  • 举报
回复
楼上的大侠厉害啊。一出手就解决了
xzhifei 2006-05-23
  • 打赏
  • 举报
回复
很简单,看代码你就知道了

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,commctrl, ComCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
StatusBar1: TStatusBar;
procedure ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure lvWinproc(var message : TMessage);
private
{ Private declarations }
FOldwndProc: TWndMethod;
public
{ Public declarations }
end;

var
Form1: TForm1;
BKPicture: TBitMap;
implementation

{$R *.dfm}

procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
var
x, y: LongInt;
begin
x := Sender.ClientWidth - BKPicture.Width;
y := Sender.ClientHeight - BKPicture.Height;
Sender.Canvas.Draw(x, y, BKPicture);
SetBkMode(Sender.Canvas.Handle, TRANSPARENT);
ListView_SetTextBKColor(Sender.Handle, CLR_NONE);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
BKPicture := TBitMap.Create;
BKPicture.LoadFromFile('Clock.bmp');
// BKPicture.LoadFromFile('image\Holiday.bmp');
FOldwndProc := ListView1.WindowProc;
ListView1.WindowProc := lvwinproc;
ListView1.DoubleBuffered := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
BKPicture.Free;

end;

procedure TForm1.FormResize(Sender: TObject);
begin
ListView1.Invalidate;
end;

procedure TForm1.lvWinproc(var message: TMessage);
begin
case message.Msg of
WM_VSCROLL, WM_HSCROLL, WM_MOUSEWHEEL : ListView1.Invalidate;
end;
FOldwndProc(message);
end;

end.
zhuojohn 2006-05-23
  • 打赏
  • 举报
回复
应该拦截 WM_ERASEBKGND 消息吧??
内容概要:本文针对风电功率随机波动对电网频率稳定性的不利影响,提出一种基于灰狼优化算法(GWO)与改进的自适应噪声完备集合经验模态分解(ICEEMDAN)相结合的混合储能功率平抑策略。通过GWO优化ICEEMDAN的关键参数(如噪声幅值、分解层数),以样本熵为适应度函数提升风电功率信号分解精度,有效抑制模态混叠问题;进而构建四阶段协同调控框架:参数优化—自适应分解—互信息熵初级功率分层—模糊控制动态修正中频功率分配,实现低频、中频、高频波动功率的合理分配。该策略结合储能系统中蓄电池与超级电容的特性,利用模糊控制器根据两者实时荷电状态(SOC)动态调整中频功率分配比例,避免过充过放,延长设备寿命。基于实测风电数据的仿真结果表明,该方法显著降低了并网功率波动率,提升了储能运行安全性与系统整体平抑效果。; 适合人群:具备一定电力系统、新能源并网、储能控制背景,熟悉Matlab/Simulink仿真工具,从事相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决风电功率波动导致的电网频率不稳定问题;②优化混合储能系统(蓄电池+超级电容)的功率分配策略;③提升风电并网电能质量与储能系统运行寿命;④为基于智能算法的新能源功率平滑控制提供可复现的技术方案。; 阅读建议:建议结合Matlab代码与Simulink仿真模型进行实践,重点关注GWO参数寻优流程、ICEEMDAN分解效果对比、互信息熵判据应用及模糊规则设计等核心模块,深入理解信号分解与储能状态协同控制的闭环机制。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧