開発言語 Delphi で自社業務用プログラムを作成しております。

よくある簡単なものを覚書としてここにまとめておきます。



Vistaと Office2007のこと(Delphi には関係ないですが覚書として)
Vista上のOffice2007で、外字 (EUDC) が正しく表示されない
原因 : Vista に含まれている繁体字中国語フォント MingLiU_HKSCSが、私用領域 E000〜F848に割り当てられている為
対策: レジストリをいじる(Excel 2007 および Access 2007)

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\General
新規 [DWORD 値] DisableFontLinking
[値のデータ] 1

Excel で写真整理をしたいがドラッグ&ドロップできないし、図の挿入ではサイズの変更が面倒、挿入写真を探すのも面倒
対策:OLEDragDropイベントをもったコントロールを使用する
ActiveX:コントロールの選択から、Microsoft ListView Controlを選んで


プロパティを設定する
   OLEDragMode = 1
   OLEDropMode = 1


OLEDragDrop イベントコードを記述します。
'ListViewを利用して、フォルダーからドラッグ&ドロップする
'   ListViewのプロパティ設定
'     OLEDragMode = 1
'     OLEDropMode = 1
Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim myImage As Variant
    Dim aWidth, aHeight, i As Integer
  'セル指定していない場合はメッセージ表示後終了
    If not(TypeName(Selection) = "Range") Then
      MsgBox ("写真を入れるセルを選択して下さい")
      Exit Sub
    End If
    aWidth = Selection.Columns.Width  'セル範囲の幅を取得
    aHeight = Selection.Rows.Height   'セル範囲の高さを取得
  'ピクチャー表示
    On Error Resume Next
      If Data.Files.Count > 0 Then
          myImage = Data.Files(1)
          ActiveSheet.Pictures.Insert(myImage).Select
          If Err = 0 Then
            Selection.Top = ActiveCell.Top + 1
            Selection.Left = ActiveCell.Left +1
              'セル幅に合わせる
              Selection.Width = aWidth
              'セル幅に合わせたとき高さオーバーするならセル高さに収める
              If Selection.Height > aHeight Then Selection.Height = aHeight
            ActiveCell.Value = myImage  '元写真のフルパスをセルに記入
            ActiveCell.Offset(1).Activate
          End If
      End If
    On Error GoTo 0
End Sub
		
サンプル: ユーザーフォームにドラッグ&ドロップ(複数ファイル対応)xls 写真貼付ボタンを押すと「写真ポスト」フォーム表示。 エクスプローラからドラッグすると、アクティブセルに貼付されます

※補足情報※「無効なオブジェクトライブラリ...」の対処方法

上記のエラーが出てくる場合は、MSCOMCTL.OCXの接続情報が壊れているようですので、
「スタート」メニューから「すべてのプログラム」→「アクセサリ」と進んで 「コマンドプロンプト」の所で『右クリック』メニューで、「管理者として実行..」を選んでください。
コマンドプロンプトの窓が開いて C:\Windows\system32> と表示されますので、続けて
REGSVR32 /u MSCOMCTL.OCX と打ち込んで(小文字でもOK) エンターキーを押すと 「mscomctl.ocxのDllUnregisterServerは成功しました」と表示されたら[ok]ボタン。
今度は、/uをのぞいて、 REGSVR32 MSCOMCTL.OCX と打ち込んでエンターキーを押すと 「mscomctl.ocxのDllregisterServerは成功しました」と表示されたら[ok]ボタン。
コマンドプロンプトの窓を閉じたら完了です。


Delphi7 でVistaアプリを作成

[XP以降のテーマに対応にする]

パレットの [Win32]からXpManXPManをフォームに貼付します。

注意1【 Panelが透けて見える】

PanelのParentBackGroundプロパティが、デフォルトでFalseと表示していますが 実際はTrue状態なので、オブジェクトインスペクタで False→True→False(太字表示)にします。

注意2【 Altを押すと消えるコントロールがある】

TButton,TCheckBox,TRagioButton等が、Altを押すと消えますので 「Fix for QC report 37403」にあるコンポーネントをインストールして VistaAltFixをフォームに貼付します。

注意3【 ScrollBoxにLabel を直貼りすると消える】

直貼りしないで、Panelの上に貼れば良いようです。

注意4【 Label のカラー指定が反映されない (透過)】

Label のTransparentプロパティが、デフォルトでFalseと表示していますが 実際はTrue状態なので、オブジェクトインスペクタで False→True→False(太字表示)にします。

注意5【 ComboBox,DBComboBoxで文字化け 】

AutoCompleteをTrueにしたとき、BackSpaceキーを使うと文字化けしますので ComboBoxのKeyPressイベントで制御すれば文字化けは解消しますが、やはり挙動がおかしいです。

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  TComboBox(Sender).AutoComplete:= not( Key=chr(VK_BACK) );
end;
	

注意6【 ボタンイメージが古くさい 】

自分がイメージするものはなかなか見つからないものです。 FreeのIconエディタで作成するのが早いかもです。 IcoFXが多機能でおすすめ。

配列に関すること


{静的配列定義}
	配列名: array [n] of 型;	配列名: array [n1..n2] of 型;

{初期値設定}(ローカル変数は不可、定数constなら可)
	配列名: array [n] of Integer = (1,2,3,,n);

{関数}
	内容の合計	SumInt(整数配列名)	Sum(実数配列名)

	添字	Low(配列名)	High(配列名)
		例	for i:=Low(配列名) to High(配列名) do

{動的配列定義}
	配列名: array of 型;
	SetLength(n);	
		// 0から始まって、n-1 まで  SetLength(5)の添字は、0,1,2,3,4

{レコード型配列定義}
type
  TPerson = record
    Name: string;
    Address: string;
    Age: Integer;
  end;
  
var
  Person: TPerson;
  Persons: array[1..100] of TPerson;

{使用例}
Persons[1].Name := '青木和典';
Persons[1].Address := '福岡県福岡市';
Persons[1].Age := 27;
ページトップ