2015年7月28日火曜日

【Delphi】圧縮・解凍

Mr.X-Ray の下記のサイトに 7-zip32.dll を使用する方法が詳しく載っている。
http://mrxray.on.coocan.jp/Delphi/plSamples/732_Archiver7-ZIP32.htm#03

7-zip のコマンドはパラメタの設定がややこしい。
Mr.X-Ray のオリジナルではサブフォルダーも処理するが、サブフォルダーを無視するには「-r」パラメタを削除する。
またパスワードを付けるには「-pXXXXXXXX」を追加する。

2015年4月21日火曜日

【jQueryMobile】 select で data-native-menu="False" が表示されない

jQueryMobile では<select>に data-native-menu="False" と書くことで独自の選択窓がポップアップするのだが、これが機能しないトラブルに見舞われた。ブラウザのコンソールでソースを表示してみたら select ボタンのリンク先にゴミがついている。
原因は以下のとおり :

2013年8月20日火曜日「php と jQuery mobile の環境でリダイレクト」で書いたように、メインページには
data-url="<?php echo $_SERVER["SCRIPT_NAME"]?>"
のように書くのだが、SCRIPT_NAME ではなく PHP_SELF と書いていた。これはこれで望ましい場合があるのだけれど、select ボタンとは両立しない。

2015年3月26日木曜日

【OpenOffice】 表紙の次のページからページ番号を振るには

OpenOffice の Writer には「ページスタイル」という属性があり、ページスタイルごとにページの設定ができるのだが、この設定の仕方がわかりにくい。

※ 準備
1)「メニュー → 表示 → サイドバー」でサイドバーを表示しておく
2)サイドバーで「スタイルと書式設定」ページを表示し、「ページスタイル」ボタンをクリック

※ 表紙にページ番号を付けない => 表紙ページのページスタイルを「最初のページ」に変更する
1)表紙ページにカーソルを置く
2)「ページスタイル」で"最初のページ"をダブルクリック

※ 次ページからページ番号を振る => 2ページ目以降のページスタイルを「標準」とし、開始ページ番号を1に変更する
 1)2ページ目の本文先頭にカーソルを移動する
 2)「書式」-「段落」
 3)「段落」ダイアログで「体裁」タブをクリック
 4)"区切り"の"ページスタイル付き"をオン
 5)"ページ番号"を"1"にする
 6)「OK」ボタンをクリック

※ フッタの有無を設定する
1)「挿入 → フッター」
2)「最初のページ」はオフ、「標準」はオンに設定

 以下のサイトに説明がある : http://oooug.jp/faq/index.php?faq%2F3%2F150

2015年1月16日金曜日

jQuery Mobile で確認画面へのリンクが機能しない

PHP と jQuery Mobile によるスマホ向けサイトではポップアップ画面等、「role="page"」で定義した第2画面へのリンクが表示されないことがある。jQuery の ajax による画面遷移をサーバ(PHPのプログラム)がサポートするのが本来かもしれないが、ajax を機能停止するのが手っ取り早い。
 <HEAD> に以下のスクリプトを書く :
<script>
$(document).bind('mobileinit', function(){
$.mobile.ajaxEnabled = false; //ChromeではこれだけでOK
$.mobile.ajaxLinksEnabled = false;
$.mobile.pushStateEnabled = false; //IEではこれが必要
});
</script>

2014年12月4日木曜日

【MySQL】 SELECT した結果を直接 SELECT の対象にする例

へ~、こんなこともできるんだ!ネタ。

MySQL を使っている方には「何を今更」かもしれないが、Firebird では動かないのではないか(最新版では試していないが)。

select
  A.GRPID, A.TEAMNAME, Count(A.MEMBERID)
  /* Join して中間テーブルを作成 */
  from (
    select MEMBERID, GRPID,
      (select TEAMNAME from TEAMINFO T where T.MEMBERID=M.MEMBERID) as TEAMNAME
    from MEMBERS M
  ) A
  group by A.GRPID, A.TEAMNAME
;


SELECT が3段になっているケースで、3段目で取得した項目を1段目の GROUP BY で指定できる。

2014年11月25日火曜日

【Excel】 セルの文字データを表す「'」(シングルクォート)を削除する

複数のセルの数式を規則的に変更したくて、
1) とりあえず先頭の「=」を「'=」に置換し、
2) いろいろと置換・編集した結果を、
3) 再び数式に戻そうと、先頭の「'=」を「=」に置換しようとしたら、
・・・残念ながら先頭の「'」はデータとして認識してくれない。
ググってみたらそういう操作はできないらしい。
以下のプログラムを作って解決 :

Sub ChangeToFormula()
' 「=」で始まる文字データを式に変更する
' 操作 : 変更したい範囲を選択して、このマクロを実行

  Dim wCell As Range
 
  For Each wCell In Selection
    If (Left(wCell.Value, 1) = "=") Then
      wCell.Formula = wCell.Value
    End If
  Next wCell
End Sub

2014年11月11日火曜日

【excel vba】 UTF-8 でテキストを入出力する

1.vbaエディタで「ツール → 参照設定」を開き、「Microsoft ActiveX Data Objects 2.8 Library」にチェックが入っていることを確認。

2.クラスモジュール
1)クラスモジュールを作成し、プロパティウィンドウからモジュール名を U8Stream とする。
2)以下のコードを貼りつける。

~~~~~~~~~

Option Explicit
'UTF-8 でテキストファイルを読込み・書き出し
' 参照設定で Microsoft ActiveX Data Objects x.x Library を選択のこと(x.x はバージョン番号)。
'
'使い方 :
'1)読み込み
'Sub test_r()
'  Dim wStream As U8Stream, rx As Long
'
'  Set wStream = New U8Stream
'  wStream.U8SOpen "C:\UserFiles\U8STest.txt", Mode:="r"
'  rx = 1
'  For rx = 1 To 999
'    If (wStream.U8SEOS) Then Exit For
'    ActiveSheet.Cells(rx, 1).Value = wStream.U8SReadText
'  Next rx
'  wStream.U8SClose
'End Sub
'
'2)書き出し
'Sub test_w()
'  Dim wStream As U8Stream, endRow As Long, rx As Long
'
'  Set wStream = New U8Stream
'  endRow = ActiveCell.SpecialCells(xlLastCell).Row
'  wStream.U8SOpen "C:\UserFiles\U8STest_w.txt"
'  For rx = 1 To endRow
'    wStream.U8SWriteText ActiveSheet.Cells(rx, 1).Value
'  Next rx
'  wStream.U8SClose
'End Sub

Private pFNam As String
Private pStream As Object
Private pBOM As Boolean
Private pModeInput As Boolean

'ストリームを開く
Public Function U8SOpen(ByVal FNam As String, _
    Optional ByVal Mode As String = "w", _
    Optional ByVal BOM As Boolean = False, _
    Optional ByVal Charset As String = "UTF-8", _
    Optional ByVal LineSeparator As Integer = adCR) As Boolean
'  FNam         : ファイル名
'  Mode         : Read or Write (第一文字で判定;小文字可)
'  BOM          : True = pBOM あり、False = なし(デフォルト)
'  Charset      : 文字セットの名称
'  LineSeparator: 行区切り文字; CR .. 13, LF .. 10, CRLF .. -1
  U8SOpen = False
  pFNam = FNam:  pBOM = BOM
  pModeInput = (LCase(Left(Mode, 1)) <> "w")
  Set pStream = New ADODB.Stream
  'Initialize the stream
  With pStream
    .Open
    .Type = adTypeText
    .Position = 0
    .Charset = Charset
    .LineSeparator = LineSeparator
  End With
  If (pModeInput) Then
    pStream.LoadFromFile (pFNam)
  End If
  U8SOpen = True
End Function

'ストリームからテキストを行単位で入力
Public Function U8SReadText() As Variant
  U8SReadText = False
  If (Not (pModeInput)) Then
    Err.Raise Number:=9990, Description:="書き出しストリームとして開かれています。"
  End If
  If (Not (pStream.EOS)) Then
    U8SReadText = pStream.ReadText(adReadLine)
  End If
End Function

'ストリームの終了をチェック
Public Function U8SEOS() As Boolean
  U8SEOS = pStream.EOS
End Function

'ストリームにテキストを出力
Public Function U8SWriteText(aStr As String) As Boolean
  U8SWriteText = False
  If (pModeInput) Then
    Err.Raise Number:=9991, Description:="読み込みストリームとして開かれています。"
  End If
  pStream.WriteText aStr, adWriteLine   'supply line sep.
  U8SWriteText = True
End Function

'ストリームを解放
Public Function U8SClose() As Boolean
  '出力モードではストリームをファイルに上書きで保存する。
  U8SClose = False
  If (pModeInput) Then
    'for Read mode .. nothing to do here.
  Else
  'for Write mode ..
    'ストリームをファイルに保存し、解放する
    If (Not pBOM) Then    'delete BOM
      Dim byteData() As Byte
      With pStream
        .Position = 0
        .Type = adTypeBinary
        .Position = 3
        byteData = pStream.Read
        .Close
        .Open
        .Write byteData
      End With
    End If
    pStream.SaveToFile pFNam, adSaveCreateOverWrite
  End If
  Set pStream = Nothing
  U8SClose = True
End Function

~~~~~~~~~