问题1:delphi中让窗体不出现放大按钮,怎样实现?
解答:把窗体BroderIcons-->biMaximize
False掉
问题2:获取所有的字体名称
for i:=0 to Screen.Fonts.Count-1 do
ComboBox1.Items.Add(Screen.Fonts.Strings[i]);
问题3:获取Treeview1选中任意项
TreeView1.Select(TreeView1.Items[i], []); TreeView1.SetFocus;
问题4:获取打印机的纸张类型
uses WinSpool;(加个单元文件)
procedure Tprintsetform.FormShow(Sender: TObject);
type
Tpname=array[0..63] of char;
Tpnames=array[0..0]of Tpname;
var
Rslt,i:integer;
PaperNames:pointer;
Device,Driver,Port:Array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.GetPrinter(Device,Driver,Port,hDMode);
combobox2.Items.Clear;
Rslt := DeviceCapabilities(Device, Port, DC_PAPERNAMES, nil, nil);
if Rslt > 0 then
begin
GetMem(PaperNames, Rslt*64);
try
if DeviceCapabilitiesA(Device,Port,DC_PAPERNAMES,PaperNames, nil) = - 1 then
raise Exception.Create('DevCap Error');
for i := 0 to Rslt - 1 do
combobox2.Items.Add(StrPas(TPNames(PaperNames^)[i]));
finally
FreeMem(PaperNames, Rslt*64);
end;
end;
end;
问题5:Label怎么设置边框效果
Label1.Canvas.Pen.Width := 5; Label1.Canvas.Rectangle(Label1.ClientRect);
问题6:获取打印机默认名称
方法一:printer.Printers[printer.printerindex]
方法二:Function GetDefaultPrinterName : String;
var
iSize : Integer;
sIniFile, sSection, sKeyName : PChar;
begin
iSize := 256;
sIniFile := 'win.ini';
sSection := 'windows';
sKeyName := 'device';
SetLength(Result,iSize);
GetPrivateProfileString(sSection,sKeyName,nil,PChar(Result),iSize,sIniFile);
Result := Copy(Result, 0, Pos(',',Result)-1);
end;
问题7:检测系统字体大小
function HasLargeFont: Boolean;
var
fontsize: Integer;
hdc: THandle;
begin
Result := False;
hdc := GetDc(HWND_DESKTOP);
fontsize := GetDeviceCaps(hdc, logpixelsx);
ReleaseDc(HWND_DESKTOP, hdc);
if fontsize = 96 then Result := False
else if fontsize = 120 then Result := True;
end;
问题8:Label怎么获取键盘输入控制
由于label没有key输入事件,但是LabelEdit有Key输入事件,把LabelEdit的Width值设置为零,则就可以把LabelEdit当作Label使用了,并且在LabelEdit中的EditLabel.onclick事件中,将LabelEdit获取焦点(setfocus)。
如果,界面上有button控件,则换成speedbutton控件,否则焦点获取不了。
问题9:怎么控制PageControl多页的切换
方法一:在changing事件里控制
procedure TForm1.PageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
Allowchange:=false;
end;
这种页面里面的内容还是可以操作的,如果把PageControl1.Enabled 属性设置为False则页面里面的内容不能操作了
方法二:如果你现在在第一页,切换到第二页或其他页时在用
pageControll.ActivePage := pagOne;
问题10:删除StringGrid任意选中的一行
var
i,j:integer;
iPos:integer;
begin
iPos:=StringGrid1.Row;
for i:=iPos to StringGrid1.RowCount-1 do
begin
for j:=0 to StringGrid1.ColCount-1 do
StringGrid1.Cells[j,i]:=StringGrid1.Cells[j,i+1];
end;
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
问题11:StringGrid中任意单元格修改输入数据
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
if(acol = 4) or (ACol = 5) then //修改第四列和第五列的单元格数据
begin
StringGrid1.Options:=StringGrid1.Options + [goEditing];
end
else
begin
StringGrid1.Options:=StringGrid1.Options - [goEditing];
end;
end;
注意:StringGrid中的Options中goRowSelect为False。
问题12:fastreport中怎么选择不同的打印机打印
先把系统所有的打印机列出来:ComboBox1.Items.Assign(Printer.Printers); //显示系统所有打印机;
其次在fastreport中选择不同的打印机打印:frxReport1.PrintOptions.Printer:=Trim(ComboBox1.Text);
frxReport1.Print;
问题13:如何让delphi的ComboBox不能输入只能选择
只需要 把 Style 设置为 csDropDownList
问题14:日期和时间查询格式
with DataModule1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from DB where '+combobox1.Text+' like '+''''+trim('%'+edit1.Text+'%')+''' and 日期>=:a and 时间>=:c and 日期 <=:b and 时间<=:d');
Parameters.ParamByName('a').Value := formatdatetime('yyyy-mm-dd',DateTimePicker1.Date);
Parameters.ParamByName('b').Value := formatdatetime('yyyy-mm-dd',DateTimePicker3.Date);
Parameters.ParamByName('c').Value := formatdatetime('hh:mm:ss',DateTimePicker2.Date);
Parameters.ParamByName('d').Value := formatdatetime('hh:mm:ss',DateTimePicker4.Date);
Open;
end;
问题:15:怎么把DateTimePicker中设置成显示的小时是24小时显示时间
把其kind属性设置成 "dtkTime ",format属性设置成 " yyyy-MM-dd HH:mm:ss " (注意:<--- HH大写)
问题16:StringGrid去掉第一行第一列蓝色框(失去焦点)
方法一:
procedure TOrderOneForm.FormCreate(Sender: TObject);
var
rect:TGridRect;
begin
//24为StringGrid1中不存在的范围
rect.Left:=24;
rect.Right:=24;
rect.Top:=24;
rect.Bottom:=24;
StringGrid.Selection:=rect;
end;
方法二:
问题17:delphi listview.items.indexof 怎么用?
Listview1.items.indexof(某个字符串),判断items是否存在“某个字符串”的项 返回值为-1代表不存在,其他值代表“某个字符串”在Items中的索引
问题18:Delphi中Memo控件怎么判断两个按键(粘贴动作)输入
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if(Key = 86) and (Shift = [ssctrl]) then //Ctrl+V 粘贴 ShowMessage('111'); end;
问题 18:Delphi7 BUG问题 一个关于DBEdit保存的问题
如图,首先这个页面在数据库表中的数据是没有相关信息的,这个矿区编号的值是从其他文本框里传进来的,然后我点击该页面的编辑按钮,执行了edit,然后输入其他栏目内容,我点击保存的时候,就弹出,奇怪的就是我如果在哪个矿区编号里用手工把其中的任意一个数字用手工修改下,就是比如1,我重新输入个1,那么你再点击保存,就没有任何问题,请问这个该如何解决呢?
在给这个DBEdit赋值时,不要用“DBEdit1.text := Form2.Edit1.text”这样的方式,要用“ADOQuery1.FieldValues["Field1"] :=Form2.Edit1.text”这种方式(Field1是DBEdit1对应的字段名)。
之前测试的结论是:“DBEdit1.text := Form2.Edit1.text”这样的方式不一定会将Form2.Edit1.text传给数据库中的字段,有可能只是传给了DBEdit1.text显示。
也可以试试这样赋值:
if DBEdit1.Field <> nil then
DBEdit1.Field.Value := 'ss';