16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:TEditの操り方"
この発言は #01263 ぺけでび さんのTEditの操り方 に対するコメントです
この発言に対し以下のコメントが寄せられています
#01265 ぺけでび さん RE:TEditの操り方
Widthの計算
新規作成のファームに、Labelを1つ、Editを2つ
Buttonを1つ置きました。
FILE:Uts3.dfm
object Form1: TForm1
Left = 192
Top = 107
Width = 308
Height = 227
Caption = 'Form1'
Color = clBtnFace
Font.Charset = SHIFTJIS_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Pゴシック'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 12
object Label1: TLabel
Left = 64
Top = 24
Width = 59
Height = 12
Caption = 'オートWidth'
end
object Edit1: TEdit
Left = 64
Top = 64
Width = 121
Height = 20
MaxLength = 2
TabOrder = 0
end
object Edit2: TEdit
Left = 64
Top = 128
Width = 121
Height = 20
MaxLength = 20
TabOrder = 1
end
object Button1: TButton
Left = 216
Top = 16
Width = 75
Height = 25
Caption = '実行'
TabOrder = 2
OnClick = Button1Click
end
end
FILE:Uts3.pas
unit Uts3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// ボタンが押された時に呼ばれる
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
DrawRect: TRect; // 位置と大きさを格納するための型
begin
// なぜ'0'かというと、横に広そうだったから
// '1'なんかだと足りなくなるかもしれないと考えたから
s := StringOfChar('0', Edit1.Maxlength+2); // 2はマージン
// Win32APIで、なんと大きさを計算してくれるのだ
DrawText(Label1.Canvas.Handle, PChar(s), -1, DrawRect, DT_CALCRECT);
// 計算した幅に更新する
Edit1.width := (DrawRect.Right - DrawRect.Left + 1);
s := StringOfChar('0', Edit2.Maxlength+2);
DrawText(Label1.Canvas.Handle, PChar(s), -1, DrawRect, DT_CALCRECT);
Edit2.width := (DrawRect.Right - DrawRect.Left + 1);
end;
end.
DrawText
Win32APIヘルプを参照しましょう
Label1.Canvas.Handle
上のコールをするためのハンドル。 TEditにはなかったので、
Labelのハンドルを借りました。 フォントの種類とサイズによっ
て幅が変化するようなので、フォントを一致させないとうまく動か
ないと考えられます。
PChar(s)
これがうわさのポインタですね。 これを覚えると面白いです。
-1
Win32APIヘルプを参照しましょう
DrawRect
ここに結果が格納されます。
DT_CALCRECT
Win32APIヘルプを参照しましょう。 計算要求の意味らしい。
Original document by ぺけでび 氏 ID:(YQJ03146)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|