Delph各种问题汇总(不断更新中)

问题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';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值