Delphi Tips 
-----------------------------

キーワード未整理:

>> Index

01/23 Windows Vista 対応のアプリ作成のポイントは?
10/12 DBGridでレコード単位で制御
07/20 FindComponentについて
03/20 ここにタイトル
03/13 TNMPOP3のGetMailMessage()でエラー
02/24 使用言語の取得
01/31 paradoxで年齢計算するには?
06/25 キーボードの種類を判別
05/17 TToolButtonのCaptionが空のときにスペースが入ってしまう
06/20 コントロール配列の作り方
02/11 Delphi 関連のメールマガジン、ニュース
02/08 CABファイルを解凍・展開したい
02/08 Delphi-MLの過去ログ検索サービス

最終更新: 4052 日前

0360  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2007/01/23 techan <> rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2007/01/23 techan <> 編集
Windows Vista 対応のアプリ作成のポイントは?

Delphi3で作成したアプリがVista上で動作しません。
ポイント、注意点をお教え願います。

なお、アプリは
  BDE経由でPARADOXに接続する、
  プリンタ情報を取得する、
  INIファイルを書き換える、
といった手順を経て動作するようになっているのですが、
  INIファイルが書き換えられていません。

セットアップも、InstallShieldを使用していますが、
  データ部分はインストールされますが、
  プログラム部分はインストールされません。

アドバイスよろしくお願いします。
参照:

0358  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2006/10/11 alesta rev 1.5
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2006/10/12 alesta 編集
DBGridでレコード単位で制御

はじめまして。alesta といいます。
まだDelphiをはじめて数日の初心者です。
現在、新規フロントシステム作成のために、既存画面をDelphi化しています。

現在どうしても実現したい現象は次のとおりです。
DBGridを使用してのレコード単位での入力規制をつけること。
たとえば

非表示  表示項目1  表示金額2 表示金額3
1       1       A             10000     200000
----------------------------------------------------------
2       0       B             20000     300000
----------------------------------------------------------
3       0       C              5000     150000

の場合、Aの列だけ入力不可。B,Cは入力可能としたいです。
このような動作は、通常コンポーネントで実現可能でしょうか。
可能な場合、どういうふうにすれば可能でしょうか。
出来なければ、StringGridで考えますが、できればDBGridで
実現したいです。
Column指定で出来そうな気がするのですが、イベントなどで
試してみたのですが、わかりません。

特定レコードの色を変える。

非表示  表示項目1  表示金額2 表示金額3
1       1       A             10000     200000
----------------------------------------------------------
2       0       B             20000     300000
----------------------------------------------------------
3       0       C              5000     150000


の場合だと、表示項目1をA→Dと入力した時点でレコード単位で色を変えたいのです。

A蟯悗靴胴猝椶鯤僂┐襦
非表示  表示項目1  表示金額2 表示金額3
 1     1       A             10000     200000
----------------------------------------------------------
 2     0       B             20000     300000
----------------------------------------------------------
 3     0       C              5000     150000

とすると、表示項目AをDにした場合、非表示項目を1→5 等に変更。

コンポーネントは、クライアントデータセット、TQueryもしくは
TTableを使用しています。

ながながとなってしまいましたが、よろしくお願いします。
参照:

0356  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2005/07/20 TATSU rev 1.2
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2005/07/20 TATSU 編集
FindComponentについて

最近delphiを始めたTATSUです。
早速ですが、自分で定義した関数の中でFindComponent関数を
使いたいのですが、コンパイル時に未定義の識別子となり
エラーが出ます。
何かしなくてはいけないことがあるのでしょうか?
分かる方がいましたら教えてください。
参照:

0355  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2005/03/20 gosen rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2005/03/20 gosen 編集
ここにタイトル

ここからが本文
Delpy6personalなのですが、Editコンポーネントのデータをファイルに保存するにはどうすれば良いのですか?初心者のためできればわかりやすくご説明していただきたいです。
参照:

0354  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2005/03/13 青い稲妻 rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2005/03/13 青い稲妻 編集
TNMPOP3のGetMailMessage()でエラー

初めまして、青い稲妻といいます。
現在、Delphi5+Win2000で、POPツールを作成しています。
そこで、みなさんにお聞きしたいのですが、TNMPOP3のGetMailMessage()えお実行後、例外が発生します。
”-ERR problem retrieving message”
これの意味がわかりません。
インターネットでも検索したのですが、ヒットしません。

どなたか、ご教授をお願いします。
参照:

0353  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2005/02/24 Nekotop rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2005/02/24 Nekotop 編集
使用言語の取得

Windowsの使用言語を取得するにはどうすればいいのでしょうか。
具体的には日本語と英語環境の違いを検出したいのです。
参照:

0351  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2004/01/31 だいず rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2004/01/31 だいず 編集
paradoxで年齢計算するには?

たとえば、個人番号、氏名、生年月日等の項目をもった
テーブルから、個人番号、氏名、年齢をselect文でとり
だし、年齢でソートするにはどのようにしたらよろしい
のでしょうか?
参照:

0199  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/07/09 osamu rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2003/06/25 osamu 編集
キーボードの種類を判別

機体依存のコードをよく書くので、以下のようなコードを持っていました。考えてみれば、使ったことはないので、未検証です。
# FMR で動く Win95 見たことないな。

//キーボードタイプが 7 (日本語文字のキーボード) の時、
//fnKeybInfo=1 でサブタイプを得ると、以下の値が返される
const
  kbdNEC98Regacy = $0D01; // PC-9800シリーズ一般のキーボード
  kbdNEC98Normal = $0D02; // PC-9801 VX/UX、PC-98XL/XL2用キーボード (ノーマル モード)
  kbdNEC98Hires  = $0D03; // PC-98XL/XL2用キーボード (ハイレゾリューション モード)
  kbdNEC98LapTop = $0D04; // PC-9800シリーズ ラップトップ用キーボード

// DOS/V対応のキーボードのサブタイプ
const
  kbdPC101       = $0000; // 101キーボード
  kbdPCAX        = $0001; // AXキーボード
  kbdPC106       = $0002; // 106キーボード
  kbdPC002       = $0003; // IBM-5576 002/003キーボード
  kbdPC003       = $0004; // IBM-5576 001キーボード
const
  kbdIBM         = $0000; // IBM
  kbdFUJITSU     = $0500; // 富士通
  kbdMATSUSHITA  = $0A00; // 松下
  kbdEPSON       = $0400; // EPSON
  kbdNEC         = $0D00; // NEC
  kbdTOSHIBA     = $1200; // 東芝

function GetMachineType: integer;
begin
  result := GetKeyboardType(1) and $ff00;
end;


[コメント]

DirectInput で GetDeviceInfo して

> DIDEVTYPEKEYBOARD_PCXT        IBM PC/XT 83-key keyboard.  
> DIDEVTYPEKEYBOARD_OLIVETTI    Olivetti 102-key keyboard.  
> DIDEVTYPEKEYBOARD_PCAT        IBM PC/AT 84-key keyboard.  
> DIDEVTYPEKEYBOARD_PCENH       IBM PC Enhanced 101/102-key or Microsoft Natural
> DIDEVTYPEKEYBOARD_NOKIA1050   Nokia 1050 keyboard.  
> DIDEVTYPEKEYBOARD_NOKIA9140   Nokia 9140 keyboard.  
> DIDEVTYPEKEYBOARD_NEC98       Japanese NEC PC98 keyboard.  
> DIDEVTYPEKEYBOARD_NEC98LAPTOP Japanese NEC PC98 laptop keyboard.  
> DIDEVTYPEKEYBOARD_NEC98106    Japanese NEC PC98 106-key keyboard.  
> DIDEVTYPEKEYBOARD_JAPAN106    Japanese 106-key keyboard.  
> DIDEVTYPEKEYBOARD_JAPANAX     Japanese AX keyboard.  
> DIDEVTYPEKEYBOARD_J3100       Japanese J3100 keyboard.  

これらの定数を利用するのもアリですね。
DXHelp の Japanese Keyboard の項目とあわせてみればこの判別からUS Keyboard にたいして追加されているキーコードと削除されているキーコードが取り出せますし。
参照:

0328  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2002/05/17 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2002/05/17 osamu 編集
TToolButtonのCaptionが空のときにスペースが入ってしまう

Q:
TToolBarの Listプロパティと ShowCaptionsプロパティをTrueに設定しているのですが、Captionが長さ0の文字列(Caption='')の場合にボタンの画像の右側にスペース1個分だけ隙間が出来ます。
VCLソースを眺めていたら、(Caption = '')の場合にわざわざスペースを1個追加しているようです。

A:
姑息な手段ですが、Caption='&'にするととりあえず幅は文字が無い状態とほぼ同じになります.但し1ドットの点が表示されてしまいますが…
参照:

0194  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/06/20 おばQ rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/06/20 おばQ 編集
コントロール配列の作り方

VisualBasicで言うところのコントロール配列を作ります。

コントロール配列とはDelphiで言えばコンポーネント配列とでも
呼べばよいのでしょうか、
つまりEdit[1]、Edit[2]、というように配列として扱える
コンポーネントのことです。
これを用いれば

for i:=1 to 5 do
  Edit[i].text := IntToStr(i);

というような芸当が可能です
さてコレを使うにはどのようにするかといいますと
ポインタの配列を用意してそれにコンポーネントを割り当てるという事をします

知っている人はしっていますがコンポーネントは
実はポインタです。
だからポインタ配列に代入する事が出来ます。

type
  TForm1 = class(TForm)
  (…省略…)
  private
    EditArray: array[1..5] of TEdit;
  end;

Edit配列の名前はEditArrayとします。

それをFormのCreateイベント等で
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i:=1 to 5 do
    if FindComponent('Edit'+IntToStr(i))<>nil then
      EditArray[i] := TEdit( FindComponent('Edit'+IntToStr(i)) );
end;

このようにします。
FindComponent('Edit1')で見付かるコンポーネントを
EditArray[1]に代入しています。
これでEditArray[i].TextとしてEditを扱う事が出来ます。


TEditだけでなくTObjectも配列として扱えますので
ObjArray: array[1..5] of TObject
と定義して
TObjArray[1]:= TObject( FindComponent('Edit'+IntToStr(1)) );
TEdit(ObjArray[1]).Textとして使う事も出来ます
そうするとEditとMemoを同じ配列にいれたりも可能です。
まあ、ここまで必要となる事もないでしょうが。
参照:

0152  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/11 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/11 osamu 編集
Delphi 関連のメールマガジン、ニュース

 〜世界中で公開されている最新Delphiコンポーネントを紹介するニュース〜
        Delphi Developer's Interface (http://www.interface.nu/)
8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---
このメールニュースの購読お申し込み・購読解除は、こちらで。
バックナンバーもダウンロードできます。 (購読無料)
http://www.interface.nu/news/
参照:

0039  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
CABファイルを解凍・展開したい

キャビネット開発キット(CABinet Development Kit)を
 http://www.microsoft.com/workshop/
で入手すれば開発ができます。
[Delphi-ML:19042]では、増田喜則@岩崎通信機さんが使い方を説明してくださっています。

総合アーカイバ・プロジェクトにCABファイル用のDLLもあるので、これを使ってもいいかもしれません。
 http://www.csdinc.co.jp/archiver/
参照:

0008  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
Delphi-MLの過去ログ検索サービス

実は私が、メールによるDelphi-ML過去ログ検索サービスを行っています。
mailto:takeuchi@leed.t.u-tokyo.ac.jp 宛てに delphi-grep ? というサブジェクトでメールを送ると詳しい使い方が返送されます。
どうぞご活用ください。

もちろん ../ でもやってます。
参照:

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords

Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp