2013年11月28日木曜日

Excelのセル内のテキストをもとにShapeを作り、グループ化するマクロ

Excelで作成したDBのテーブル定義書などをもとにER図をExcelのShapeを使って作成するのを補助するマクロです。 カラム名を選択した状態でこのマクロを実行すると、各セル単位でShapeを作成し、グループ化します。 ER図作成時にコネクタを任意のカラムに結合したのに、レイアウトの都合からShapeを移動するとコネクタの位置がずれるので作成しました。
Sub CellTextToShape()
'
' ER図作成補助 Macro
' 選択された範囲の文字列をテキストとするShapeを作成する
'
' Keyboard Shortcut: Ctrl+q
'
    Set xColumns = New Collection

    '外枠
    px = Selection.Left - 5
    py = Selection.Top - 5
    pw = Selection(1).Width + 10
    ph = Selection(1).Height * Selection.Count + 10
    Dim xParent As Shape
    Set xParent = ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, Left:=px, Top:=py, Width:=pw, Height:=ph)
    xParent.Line.ForeColor.RGB = RGB(0, 0, 0)
    xParent.Fill.ForeColor.RGB = RGB(255, 255, 255)
    xColumns.Add xParent
    
    '中身
    For i = Selection(1).Row To Selection(Selection.Count).Row
        nCol = Selection(1).Column
        nRow = Selection(1).Row
        x = Cells(i, nCol).Left
        y = Cells(i, nCol).Top
        w = Cells(i, nCol).Width
        h = Cells(i, nCol).Height
        txt = Cells(i, nCol).Value
        s = Cells(i, nCol).Font.Size
        Dim xShape As Shape
        Set xShape = ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, Left:=x, Top:=y, Width:=w, Height:=h)
        xShape.TextFrame.Characters.Text = txt
        xShape.TextFrame.Characters.Font.Color = vbBlack
        xShape.TextFrame.Characters.Font.Size = s
        xShape.TextFrame.HorizontalAlignment = xlHAlignLeft
        xShape.TextFrame.MarginBottom = 0
        xShape.TextFrame.MarginTop = 0
        xShape.Fill.Visible = False
        xShape.Line.Visible = False
        xShape.Name = txt

        xColumns.Add xShape
        
        Debug.Print (txt & vbTab & w & vbTab & h)
        'ActiveSheet.Shapes(txt).TextFrame.Characters.Text = txt
    Next
    
    For Each xShape In xColumns
        xShape.Select Replace:=False
    Next
    Selection.Group
    
End Sub

Excel2007でリボンに[開発]タブを表示するには

Microsoft2007でリボンに[開発]タブを表示するには、Excelのオプションを開き、[基本設定]の「[開発]タブをリボンに表示する」のチェックをオンにする。


2013年11月27日水曜日

マイクロソフト純正の仮想デスクトップマネージャ

デフォルトの設定でAlt+1~4で4つのデスクトップを使い分けられて便利。

動作も軽い。

http://technet.microsoft.com/en-in/sysinternals/cc817881(en-us).aspx



サクラエディタのSQL崩しマクロ

サクラエディタでSQL崩しをするためのマクロ。 SQL崩し.mac として保存。 [設定]→[共通設定]→マクロタブを選択。 [名前]にS「SQL崩し」、[File]に保存したマクロファイルを指定して[設定]ボタンをクリックする。
//キーボードマクロのファイル

//S_SelectAll(0); // すべて選択
//S_ToUpper(0); // 大文字
S
_ReplaceAll('\\t', '    ', 156); // タブをスペースに
S_ReDraw(0); // 再描画
S_ReplaceAll('[ ]+', ' ', 156); // 連続スペースをまとめる
S_ReDraw(0); // 再描画
S_ReplaceAll('\\r', '\\n', 156); // キャリッジリターン削除
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\n', '', 156); // 空行削除
S_ReDraw(0); // 再描画
S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('^ ', '', 28); // 行頭のスペース削除
S_ReDraw(0); // 再描画
S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('$', ' ', 28); // 行末にスペース追加
S_ReDraw(0); // 再描画

S_ReplaceAll('SELECT ', 'SELECT \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('INSERT ', 'INSERT \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('UPDATE ', 'UPDATE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('DELETE ', 'DELETE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('FROM ', 'FROM \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('WHERE ', 'WHERE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('ORDER BY ', 'ORDER BY \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('GROUP BY ', 'GROUP BY \\n', 28); // 
S_ReDraw(0); // 再描画

S_ReplaceAll('^', '    ', 28); // 行頭に4つスペース
S_ReDraw(0); // 再描画

S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('    SELECT ', 'SELECT', 28); // SELECTのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    INSERT ', 'INSERT', 28); // INSERTのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    UPDATE ', 'UPDATE', 28); // UPDATEのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    DELETE ', 'DELETE', 28); // DELETEのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    FROM ', 'FROM ', 28); // FROMのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    WHERE ', 'WHERE', 28); // WHEREのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    ORDER BY ', 'ORDER BY ', 28); // ORDER BYのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    GROUP BY ', 'GROUP BY ', 28); // GROUP BYのインデント解除
S_ReDraw(0); // 再描画

S_ReplaceAll('\\Z    ON ', ' ON ', 28); // JOINの途中で折り返さない
S_ReDraw(0); // 再描画

2013年11月20日水曜日

Androidアプリでボタンの状態(ステータス)ごとに色を変化させるには

selectorの中で指定するボタンのステータスの順番で意図したとおりにうまくいったりいかなかったり・・・。 とりあえず、ボタンが無効の時(state_enabled="false")を最初に記述したところenableがfalseの時の指定がうまく効いた。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#b0c4de"></item>
    <item android:state_pressed="false" android:color="#ffffff"></item>
    <item android:state_pressed="true" android:color="#b0c4de"></item>
</selector>

AndroidアプリでTableRowのOnClickをバインドするには

TableRowのOnClickにActivityのメソッド名を指定しても、それだけだとクリックしても指定されたメソッドは呼び出されない。 TableRowのプロパティにandroid:clickable="true"を追加してやるとイベントを拾えるようになる。
<TableRow
  android:id="@+id/tableRow2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
    android:clickable="true"
    android:onClick="showHowToPlay" >

Androidアプリで動的に生成したViewの幅や高さを取得するには

Viewを動的に生成する場合に、ほかのViewの幅を揃えたい場合などがあると思うが、ViewのgetWidth()はレイアウトが完了してからでないと0を返してくるので、取得したい幅が取得できない。 そこで、ViewTreeObserverのaddOnGlobalLayoutListener()を使って、レイアウト完了後にコールバックを受けて幅を取得する。
// ボタンの高さを幅に合わせる
ViewTreeObserver vto = btnHoge.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int width = btnHoge.getWidth();
    }
});

Androidアプリで別のActivityを起動するには

Androidアプリで別のActivityを起動するにはIntentのインスタンスを生成し、startActivity()メソッドに渡す。
        Intent intent = new Intent(this, HogeActivity.class);
        startActivity(intent);

AndroidのActivityで画面を縦固定にするには

AndroidのActivityで画面を縦固定にするにはsetRequestedOrientation()メソッドにActivityInfoの定数SCREEN_ORIENTATION_PORTRAITを渡す。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // タイトルバーを非表示に
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        // 画面は縦固定
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Activityのタイトルバーをコードで非表示にするには

Activityのタイトルバーをコードで非表示にするには、requestWindowFeature()メソッドにWindowの定数FEATURE_NO_TITLEを渡す。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // タイトルバーを非表示に
        requestWindowFeature(Window.FEATURE_NO_TITLE);

2013年11月19日火曜日

AFreeChart-0.0.4の折れ線グラフでICS上では判例が正しく表示されない問題の回避策

// AFreeChart-0.0.4でICSでは凡例が正しく表示されない問題の回避
if(Build.VERSION.SDK_INT > 10){
    chartView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}