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;
ページトップ

