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の接続情報が壊れているようですので、 |
Delphi7 でVistaアプリを作成
[XP以降のテーマに対応にする]
パレットの [Win32]からXPManをフォームに貼付します。注意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;