Delphi是怎样实现鼠标点击--〉string变蓝这一过程的。(50分)

  • 主题发起人 主题发起人 j5203
  • 开始时间 开始时间
J

j5203

Unregistered / Unconfirmed
GUEST, unregistred user!
当鼠标在Checklistbox控件上点击时,就会有一个string被选中变蓝。请问Delphi是怎样
实现鼠标点击--〉string变蓝这一过程的。
 
你自己去看他的源代码啊,
 
其实你的问题本质上是高亮度显示文本,给你一个ListBox的例子。
在Form上加入一个TListBox和TEditBox构件


在Form的PRIVATE部分输入:

HighlightText : string ;

TextLength : integer ;

Foreground : TColor ;

Background : TColor ;

----

以下是Form1,ListBox1和EditBox1的事件代码:



procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

Rect: TRect; State: TOwnerDrawState);

var

Location : integer ;

s : string ;

Text : string;

ax : integer ;

TextWidth : integer ;

OldBrushColor : TColor ;

OldFontColor : TColor ;

const

HighlightColor = clRed ;

begin

with (Control as TListBox) do begin

Canvas.FillRect(Rect) ;

Location := Pos(HighlightText, Items[Index]) ;

if Location > 0 then begin

TextWidth := Canvas.TextWidth(HighlightText) ;

s := Items[Index] ;

ax := 0 ;

while Location > 0 do begin

Text := Copy(s, 1, Location - 1) ;

s := Copy(s, Location + TextLength, Length(s)) ;

Canvas.TextOut(ax, Rect.Top, Text) ;

Inc(ax, Canvas.TextWidth(Text)) ;

OldBrushColor := Canvas.Brush.Color ;

OldFontColor := Canvas.Font.Color ;

Canvas.Brush.Color := Background ;

Canvas.Font.Color := Foreground ;

Canvas.TextOut(ax, Rect.Top, HighlightText) ;

Canvas.Brush.Color := OldBrushColor ;

Canvas.Font.Color := OldFontColor ;

Inc(ax, TextWidth) ;

Location := Pos(HighlightText, s) ;

end ;

Canvas.TextOut(ax, Rect.Top, s) ;

end

else

Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]) ;

end ;

end;



procedure TForm1.Edit1Change(Sender: TObject);

begin//如果你想查找文本...

HighlightText := Edit1.Text ;

TextLength := Length(Edit1.Text) ;

ListBox1.Refresh ;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Clear;

ListBox1.Items.LoadFromFile('c:/Autoexec.bat');//你可以改变这里

ListBox1.Style:=lbOwnerDrawFixed;

HighlightText := Edit1.Text ;

TextLength := 4 ;

Background := clRed ;

Foreground := clWhite ;

end;
 
大哥现在越来越难得出手了,想必生日来临,心情比较好。
贴子已Ctrl-c,更祝[h4][brown]生日快乐[/h4][/brown]
 
各位可能没明白我的意思。其实我就是在看它的源代码。我估计是在WMLButtonDown,
因为我重载了这个过程,把它的内容写为空,点击控件时就不能使string变蓝了。
但我在TCustomListBox的WMLButtonDown过程里却找不到使string变蓝的内容,所以才
提的这个问题。
 
使用鼠标事件
 
最小化用 showwindow(handle,sw_hide);
还原用 showwindow(handle,sw_show)
可以实现吧, 我做的软件就没问题呀.
 
其实不存在你所想象的变蓝的过程, 每次鼠标的动作只是改变所选择的项目.
至于选中的Item的背景色是DrawItem的时候决定的, 请参考TCustomListBox.CNDrawItem.
 
看来我还是没说明白。其实我的意思就是:每次鼠标的动作是怎么改变所选择项目的。
我在TCustomListBox的WMLButtonDown过程里找不到改变所选择项目的语句。
 
呵呵,选择是在CNCOMMAND里执行
 
卷起千堆雪tyn你好我用DELPHI有一两年时间,我觉得你对DELPHI的水平挺高的,
希望能跟你交个朋友,dunktalent@sohu.com!!!!!!
 
如果在这个问题上,加上一个内容,不是怎样做了,
当listbox1上的文本每行的内容了,可以在listbox2出现一些内容!,thanks[:D][:)][8D]
 
"其实我的意思就是:每次鼠标的动作是怎么改变所选择项目的"我想,这个问题你应该去问
微软的人,他们是怎么定义鼠标的动作的:)
其实会长和menxin兄已经说得够清楚的了,并不需要在BUTTONDOWN里使STRING变篮的:)
 
如果只是使字符串变色,我认为不是太难。我的意见是改变字体颜色就可:
举例:
如:CheckBox的Caption变色:
在OnClick中加入下面一行就可:
CheckBox1.Font.Color :=clblue;
同时还可根据CheckBox的状态来改变字体的颜色.

水平有限,请指教.
 
找不到代码很正常的,很多标准的控件是由WINDOWS自己解决的,DELPHI只是封装了一下。
iamfly说得有道理,你应该去问微软的人。
 
后退
顶部