窗体上的控件数量与名称
//包含控件数: var num: Integer; begin num := Self.ControlCount; ShowMessage('窗体上共有控件: ' + IntToStr(num)); //没有包括不可视控件和panl内的控件 //ShowMessage('Panel1上共有控件: ' + IntToStr(Panel1.ControlCount)); end;
//遍历窗体上的控件: var i: Integer; begin for i := 0 to Self.ControlCount - 1 do begin ShowMessage(Self.Controls[i].Name); end; end;
//让 Edit 只接受数字 //方法1: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in ['0'..'9']) then Key := Chr(0); end; //方法2: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (Byte(Key) in [48..57]) then // 0的 Ascii 是 48 Key := Chr(0); end; //方法3: procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not CharInSet(Key, ['1'..'5']) then Key := #0; end;
//Edit 文本的选择与光标位置 procedure TForm1.Button1Click(Sender: TObject); begin Edit1.SetFocus; //给于焦点 SendMessage(Edit1.Handle,EM_SETSEL,0,1); //选择第一个字符 SendMessage(Edit1.Handle,EM_SETSEL,0,-1); //全选 SendMessage(Edit1.Handle,EM_SETSEL,1,1); //光标移到第一个字符后面 SendMessage(Edit1.Handle,EM_SETSEL,0,0); //光标移到开始 SendMessage(Edit1.Handle,EM_SETSEL,-1,0); //光标移到开始 end;
procedure TForm1.Memo1Click(Sender: TObject); begin Text := Format('当前列:%d, 当前行:%d', [Memo1.CaretPos.X, Memo1.CaretPos.Y]); end; //用 API 实现 procedure TForm1.Memo1Click(Sender: TObject); var LineY,LineX: Integer; begin LineY := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,Memo1.SelStart,0); LineX := SendMessage(Memo1.Handle,EM_LINEINDEX,LineY,0); Text := '当前行:' + IntToStr(LineY) + '; ' + //0开始 '当前列:' + IntToStr(Memo1.SelStart - LineX) + '; ' + //0开始 '当前字符:' + IntToStr(Memo1.SelStart) + '. '; //包括#13#10 end;
//统计字数 //添加 Memo1、Label1、Label2、还有Button1 procedure TForm1.Button1Click(Sender: TObject); var s: string; i,sum,e,c,t: Integer; begin s := Memo1.Text; e := 0; c := 0; sum := Length(s); for i := 0 to sum do begin if (Ord(s[i]) >= 33) and (Ord(s[i]) <= 126) then begin Inc(e); Label1.Caption := '字母数: ' + IntToStr(e); end; if Ord(s[i]) >= 127 then begin Inc(c); Label2.Caption := '汉字数: ' + IntToStr(c div 2); end; end; end;
我实现了查找richedit中的字符的功能,可以选择查找到的字符,但是richedit不会自己滚动到查找到的位置!
RichEdit1.ScrollBy(RichEdit1.CaretPos.X, RichEdit1.CaretPos.Y);
richedit可以实现用键控制改写/插入状态
1。如何用代码控制它一直在改写状态?
2。它和memo是同源的,怎样让memo也有这个功能?
找到了一种替代方法
在keypress事件中
memo1.sellength:=1;
memo1.seltext:=key;
当然要去掉不可见字符。
如果是用输入法就不知道怎么弄了,ime函数看不懂,不知道是什么消息
抱歉, 没能帮你解决; 原因: 它们都不是原生的 Delphi 控件.
我想用下面方式模拟一下, 但感觉不正统:
if GetKeyState(VK_INSERT) = 0 then
begin
...
end;
RichEdit2的时候,怎么保证没有半行文字的出现,最终是想将RicheEdit按其ClientHeight分页自动将输入文字转换成多张图片,曾想过在出现半行的地方插入回车符,但又不知道怎么精确定位到半行的位置。
RichEdit1.CaretPos := Point(0, 行数);