以前有人告诉我在 ondrawdatacell 里,可我的代码怎么也不往里面去。
有别的办法吗??
2)如何在combobox中实现类是ie地址输入时的功能。
就是当用户输入一个字母后,自动dropdown并且将top定位到第一个包含输入窜
得位子。但输入的值不能变,只有客户选择后才能将值添道输入栏里。
3)当combobox dropdown 时我设置下拉框比combobox本身宽,这时下拉列表于combobox
是左对齐 如何让其右对齐呢??
4)在com/dcom程序中如何实现服务器端向客户端发送信息呢(如:弹出一个对话框等)
最好能有相关的文章最好。我按《delphi 5 开发人员指南》的做了。可它的例程当
client,server在同一机器时好用,一分开就不能用了。
请高手指点,前面几个问题最好能详细写清
最后一个问题,可以介绍几篇文章也可。
14 个解决方案
#1
1.你可以在dbgrid的oncellclick事件里看看相关的query对应的记录的序号,就知道第几行了。
2.在onchange里每次都与你的TStrings里列出的待选项相比,如果...就...,然后,下面就太简单了,不说了。
3.左对齐。
4.用socket尝试一下。
2.在onchange里每次都与你的TStrings里列出的待选项相比,如果...就...,然后,下面就太简单了,不说了。
3.左对齐。
4.用socket尝试一下。
#2
Bob7946(X度空间)
我kao,你真NB.
佩服佩服。
无话可说…………
我kao,你真NB.
佩服佩服。
无话可说…………
#3
关注前三个,第四个好象不在同一个域的计算机用com/Dcom经常出错
#4
你的代码要跳入ondrawcell里面,则你首先要draw一下你的dbgrid,你不重画它的话,是无法实现你的想法的。
当前行的top,这个我不太懂你的意思,如果是希望等到当前行在dbgrid的位置的话,应该是可以通过获得记录之间的相对位置计算出来的。
当前行的top,这个我不太懂你的意思,如果是希望等到当前行在dbgrid的位置的话,应该是可以通过获得记录之间的相对位置计算出来的。
#5
cobi(小新国际) :
Top , Rect 不懂???
我想知道当前选定的cell得left,top,width,height,bottom,right。
这回你该明白了吧。呵呵。
Top , Rect 不懂???
我想知道当前选定的cell得left,top,width,height,bottom,right。
这回你该明白了吧。呵呵。
#6
1.响应OnCellClick,然后用到一个小偷的本事:
TThiefGrid = class(TDBGrid)
public
function CellRect(ACol, ARow: Longint): TRect;
property Col;
property Row;
end;
function TThiefGrid.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
在你的OnCellClick中写:
with TThiefGrid(DBGrid1) do
CurrCellRect := CellRect(Col, Row);
2.ComboBox好象就有该功能,你可以在输入好后按向下键然后回车即可。
3.CB_GETCOMBOBOXINFO可以得到DropDownList的窗口句柄,然后设置窗口位置即可。
TThiefGrid = class(TDBGrid)
public
function CellRect(ACol, ARow: Longint): TRect;
property Col;
property Row;
end;
function TThiefGrid.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
在你的OnCellClick中写:
with TThiefGrid(DBGrid1) do
CurrCellRect := CellRect(Col, Row);
2.ComboBox好象就有该功能,你可以在输入好后按向下键然后回车即可。
3.CB_GETCOMBOBOXINFO可以得到DropDownList的窗口句柄,然后设置窗口位置即可。
#7
问题2我已经实现,只是觉得不满意。
3)问题 我就是想知道如何设置位置。详细点好不好??
4)最关键的问题怎么没人说????
3)问题 我就是想知道如何设置位置。详细点好不好??
4)最关键的问题怎么没人说????
#8
1.得到CELL RECT在stringGrid的OnMouseUp中加入下面的代码。
var
RowCnt,ColCnt:integer;
aRect: TRect;
begin
if Button = mbLeft then
begin
StringGrid2.MouseToCell(x, y, ColCnt, RowCnt);
aRect := StringGrid2.CellRect(ColCnt, RowCnt);
...
2.
在onkeydown里处理
if not combobox1.DroppedDown then Combobox1.DropedDown := True;
...
3.在combobox的ondrawItem()加入下面的代码,并且style := csOwnerDrawFixed;
var
AText: string;
begin
AText := ComboBox1.Items[Index];
With Control as TComboBox do
begin
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(AText), Length(AText), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX or DT_RIGHT)
end;//关键是DRAWTEXT 的参数设置,DT_RIGHT,
if odSelected in State then
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
if odFocused in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
end;
也可以加上SHOWHINT...
var
RowCnt,ColCnt:integer;
aRect: TRect;
begin
if Button = mbLeft then
begin
StringGrid2.MouseToCell(x, y, ColCnt, RowCnt);
aRect := StringGrid2.CellRect(ColCnt, RowCnt);
...
2.
在onkeydown里处理
if not combobox1.DroppedDown then Combobox1.DropedDown := True;
...
3.在combobox的ondrawItem()加入下面的代码,并且style := csOwnerDrawFixed;
var
AText: string;
begin
AText := ComboBox1.Items[Index];
With Control as TComboBox do
begin
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(AText), Length(AText), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX or DT_RIGHT)
end;//关键是DRAWTEXT 的参数设置,DT_RIGHT,
if odSelected in State then
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
if odFocused in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
end;
也可以加上SHOWHINT...
#9
问题3)大家可能误解了。我是要下拉的那个框框的右面与combobox的右面对齐,而不是其中的字符。
#10
3)问题 我就是想知道如何设置位置。详细点好不好??
----------------------------------------------------
看一下WIN32 API的帮助就明白了
var
cbbInfo: TCOMBOBOXINFO;
rct: TRect;
begin
ComboBox1.Perform( CB_GETCOMBOBOXINFO, 0, Integer(@cbbInfo) );
GetWindowRect( cbbInfo.hwndList, rct );
对rct进行调整
MoveWindow( cbbInfo.hwndList, rct.left, rct.top, rct.right-rct.left, rct.bottom-rct.top, False );
----------------------------------------------------
看一下WIN32 API的帮助就明白了
var
cbbInfo: TCOMBOBOXINFO;
rct: TRect;
begin
ComboBox1.Perform( CB_GETCOMBOBOXINFO, 0, Integer(@cbbInfo) );
GetWindowRect( cbbInfo.hwndList, rct );
对rct进行调整
MoveWindow( cbbInfo.hwndList, rct.left, rct.top, rct.right-rct.left, rct.bottom-rct.top, False );
#11
CB_GETCOMBOBOXINFO 我的机器找不到 [Error] Unit2.pas(105): Undeclared identifier: 'CB_GETCOMBOBOXINFO'
2)问题但我用上(下)键移动到当前最上(最下)需要滚动时速度特别慢。怎样才能让他们飞一样的快呢??
#12
那就用GetComboBoxInfo吧:
GetComboBoxInfo( ComboBox1.Handle, cbbInfo );
好象更好用些。:)
CB_GETCOMBOBOXINFO是Windows新版本中的(XP):Windows NT/2000 or later: Requires Whistler.
==========================================
移到最上/下用Ctrl+PageUp, Ctrl+PageDown
GetComboBoxInfo( ComboBox1.Handle, cbbInfo );
好象更好用些。:)
CB_GETCOMBOBOXINFO是Windows新版本中的(XP):Windows NT/2000 or later: Requires Whistler.
==========================================
移到最上/下用Ctrl+PageUp, Ctrl+PageDown
#13
我就是要用上(下)建。我要浏览。
如何能让他向delphi的提示上下移动那么快??
如何能让他向delphi的提示上下移动那么快??
#14
Delphi的提示应该是自己写的,如果你想要那样的效果,就不能用ComboBox了,自己写一个就可以了。(Windows的ComboBox做了一些处理,所以有延迟效果)
#1
1.你可以在dbgrid的oncellclick事件里看看相关的query对应的记录的序号,就知道第几行了。
2.在onchange里每次都与你的TStrings里列出的待选项相比,如果...就...,然后,下面就太简单了,不说了。
3.左对齐。
4.用socket尝试一下。
2.在onchange里每次都与你的TStrings里列出的待选项相比,如果...就...,然后,下面就太简单了,不说了。
3.左对齐。
4.用socket尝试一下。
#2
Bob7946(X度空间)
我kao,你真NB.
佩服佩服。
无话可说…………
我kao,你真NB.
佩服佩服。
无话可说…………
#3
关注前三个,第四个好象不在同一个域的计算机用com/Dcom经常出错
#4
你的代码要跳入ondrawcell里面,则你首先要draw一下你的dbgrid,你不重画它的话,是无法实现你的想法的。
当前行的top,这个我不太懂你的意思,如果是希望等到当前行在dbgrid的位置的话,应该是可以通过获得记录之间的相对位置计算出来的。
当前行的top,这个我不太懂你的意思,如果是希望等到当前行在dbgrid的位置的话,应该是可以通过获得记录之间的相对位置计算出来的。
#5
cobi(小新国际) :
Top , Rect 不懂???
我想知道当前选定的cell得left,top,width,height,bottom,right。
这回你该明白了吧。呵呵。
Top , Rect 不懂???
我想知道当前选定的cell得left,top,width,height,bottom,right。
这回你该明白了吧。呵呵。
#6
1.响应OnCellClick,然后用到一个小偷的本事:
TThiefGrid = class(TDBGrid)
public
function CellRect(ACol, ARow: Longint): TRect;
property Col;
property Row;
end;
function TThiefGrid.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
在你的OnCellClick中写:
with TThiefGrid(DBGrid1) do
CurrCellRect := CellRect(Col, Row);
2.ComboBox好象就有该功能,你可以在输入好后按向下键然后回车即可。
3.CB_GETCOMBOBOXINFO可以得到DropDownList的窗口句柄,然后设置窗口位置即可。
TThiefGrid = class(TDBGrid)
public
function CellRect(ACol, ARow: Longint): TRect;
property Col;
property Row;
end;
function TThiefGrid.CellRect(ACol, ARow: Longint): TRect;
begin
Result := inherited CellRect(ACol, ARow);
end;
在你的OnCellClick中写:
with TThiefGrid(DBGrid1) do
CurrCellRect := CellRect(Col, Row);
2.ComboBox好象就有该功能,你可以在输入好后按向下键然后回车即可。
3.CB_GETCOMBOBOXINFO可以得到DropDownList的窗口句柄,然后设置窗口位置即可。
#7
问题2我已经实现,只是觉得不满意。
3)问题 我就是想知道如何设置位置。详细点好不好??
4)最关键的问题怎么没人说????
3)问题 我就是想知道如何设置位置。详细点好不好??
4)最关键的问题怎么没人说????
#8
1.得到CELL RECT在stringGrid的OnMouseUp中加入下面的代码。
var
RowCnt,ColCnt:integer;
aRect: TRect;
begin
if Button = mbLeft then
begin
StringGrid2.MouseToCell(x, y, ColCnt, RowCnt);
aRect := StringGrid2.CellRect(ColCnt, RowCnt);
...
2.
在onkeydown里处理
if not combobox1.DroppedDown then Combobox1.DropedDown := True;
...
3.在combobox的ondrawItem()加入下面的代码,并且style := csOwnerDrawFixed;
var
AText: string;
begin
AText := ComboBox1.Items[Index];
With Control as TComboBox do
begin
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(AText), Length(AText), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX or DT_RIGHT)
end;//关键是DRAWTEXT 的参数设置,DT_RIGHT,
if odSelected in State then
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
if odFocused in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
end;
也可以加上SHOWHINT...
var
RowCnt,ColCnt:integer;
aRect: TRect;
begin
if Button = mbLeft then
begin
StringGrid2.MouseToCell(x, y, ColCnt, RowCnt);
aRect := StringGrid2.CellRect(ColCnt, RowCnt);
...
2.
在onkeydown里处理
if not combobox1.DroppedDown then Combobox1.DropedDown := True;
...
3.在combobox的ondrawItem()加入下面的代码,并且style := csOwnerDrawFixed;
var
AText: string;
begin
AText := ComboBox1.Items[Index];
With Control as TComboBox do
begin
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(AText), Length(AText), Rect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX or DT_RIGHT)
end;//关键是DRAWTEXT 的参数设置,DT_RIGHT,
if odSelected in State then
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
if odFocused in State then
begin
Canvas.Brush.Color := clNavy;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 3, Rect.Top, TComboBox(Control).Items[Index]);
end;
end;
也可以加上SHOWHINT...
#9
问题3)大家可能误解了。我是要下拉的那个框框的右面与combobox的右面对齐,而不是其中的字符。
#10
3)问题 我就是想知道如何设置位置。详细点好不好??
----------------------------------------------------
看一下WIN32 API的帮助就明白了
var
cbbInfo: TCOMBOBOXINFO;
rct: TRect;
begin
ComboBox1.Perform( CB_GETCOMBOBOXINFO, 0, Integer(@cbbInfo) );
GetWindowRect( cbbInfo.hwndList, rct );
对rct进行调整
MoveWindow( cbbInfo.hwndList, rct.left, rct.top, rct.right-rct.left, rct.bottom-rct.top, False );
----------------------------------------------------
看一下WIN32 API的帮助就明白了
var
cbbInfo: TCOMBOBOXINFO;
rct: TRect;
begin
ComboBox1.Perform( CB_GETCOMBOBOXINFO, 0, Integer(@cbbInfo) );
GetWindowRect( cbbInfo.hwndList, rct );
对rct进行调整
MoveWindow( cbbInfo.hwndList, rct.left, rct.top, rct.right-rct.left, rct.bottom-rct.top, False );
#11
CB_GETCOMBOBOXINFO 我的机器找不到 [Error] Unit2.pas(105): Undeclared identifier: 'CB_GETCOMBOBOXINFO'
2)问题但我用上(下)键移动到当前最上(最下)需要滚动时速度特别慢。怎样才能让他们飞一样的快呢??
#12
那就用GetComboBoxInfo吧:
GetComboBoxInfo( ComboBox1.Handle, cbbInfo );
好象更好用些。:)
CB_GETCOMBOBOXINFO是Windows新版本中的(XP):Windows NT/2000 or later: Requires Whistler.
==========================================
移到最上/下用Ctrl+PageUp, Ctrl+PageDown
GetComboBoxInfo( ComboBox1.Handle, cbbInfo );
好象更好用些。:)
CB_GETCOMBOBOXINFO是Windows新版本中的(XP):Windows NT/2000 or later: Requires Whistler.
==========================================
移到最上/下用Ctrl+PageUp, Ctrl+PageDown
#13
我就是要用上(下)建。我要浏览。
如何能让他向delphi的提示上下移动那么快??
如何能让他向delphi的提示上下移动那么快??
#14
Delphi的提示应该是自己写的,如果你想要那样的效果,就不能用ComboBox了,自己写一个就可以了。(Windows的ComboBox做了一些处理,所以有延迟效果)