2010年05月18日

css:divの子ノードがdivに囲まれない

divの子ノードにcssでfloatが指定されていると、何故かdivの高さが無くなり子ノードが囲まれなくなる。

対処としては親ノードのdivにもfloatを指定する。

<div id="ddd" style="border: solid 1px red;"><span id="sss">あいうえお</span></div>
<script>
var d=document.getElementById("ddd");
var s=document.getElementById("sss");
alert("height="+d.offsetHeight);
if (typeof(s.style.styleFloat)=="undefined") {
s.style.cssFloat="right";
} else {
s.style.styleFloat="right";
}
alert("height="+d.offsetHeight);

if (typeof(d.style.styleFloat)=="undefined") {
d.style.cssFloat="left";
} else {
d.style.styleFloat="left";
}
// FireFox, Chrome は↓が無いと幅がspanの幅と同じになる
d.style.width="100%";
alert("height="+d.offsetHeight);
posted by 忘却の達人 at 22:21| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2010年04月29日

Delphi:連想配列

Delphi2009のTDictionaryクラスを使って連想配列と同等のことができる。
ただ存在しないキーでは例外が発生するので、以下のようにTDictionaryを継承してItemsプロパティを変えてやれば、存在しないキーは参照時は型の初期値を返し、設定時はリストに追加されるようになる。
uses節にGenerics.Collectionsを追加。

THash<TKey,TValue> = class(TDictionary<TKey,TValue>)
private
  function GetItem(const Key: TKey): TValue;
  procedure SetItem(const Key: TKey; const Value: TValue);
public
  property Items[const Key: TKey]: TValue read GetItem write SetItem; default;
end;

{ THash<TKey, TValue> }

function THash<TKey, TValue>.GetItem(const Key: TKey): TValue;
begin
  TryGetValue(Key, Result);
end;

procedure THash<TKey, TValue>.SetItem(const Key: TKey;
  const Value: TValue);
begin
  AddOrSetValue(Key, Value);
end;

//---------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  dic: THash<string, string>;
begin
  dic := THash<string, string>.Create;
  try
    dic['東京都'] := '新宿区';
    dic['埼玉県'] := 'さいたま市';
    dic['神奈川県'] := '横浜市';
    Memo1.Lines.Add(dic['東京都']);
    Memo1.Lines.Add(dic['埼玉県']);
    Memo1.Lines.Add(dic['神奈川県']);
    Memo1.Lines.Add(dic['来来軒']);
  finally
    dic.Free;
  end;
end;
posted by 忘却の達人 at 07:16| Comment(0) | TrackBack(0) | Delphi | このブログの読者になる | 更新情報をチェックする

2010年04月25日

JavaScript:ブラウザによる記述の違い

JavaScriptでブラウザによる記述の違い。いっぱいありそうなんで随時気がついたものを追加。

FireFoxie
event.targetevent.srcElement
element.parentNodeelement.parentElement
element.textContentelement.innerText
element.style.cssFloatelement.style.styleFloat
element.addEventListenerelement.attachEvent
element.__defineSetter__無し
element.__defineGetter__無し
getAttribute("class")getAttribute("className")
window.getSelection()document.selection
selection.getRangeAt(0)selection.createRange()
var e=document.createEvent(event type);
e.initEvent(event name, true, true);
element.dispatchEvent(e);
element.fireEvent("on"+event name)
posted by 忘却の達人 at 20:23| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2010年04月23日

MySQL:既存のテーブルからcreate table文を生成

MySQLで既存のテーブルからcreate table文を生成する。
show create table <テーブル名>;
posted by 忘却の達人 at 22:43| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

2010年04月22日

Access:レポート項目で縮小して全体を表示する

Accessのレポート項目で、Excelの「縮小して全体を表示する」を行う関数。

↓の関数はとりあえず1行のテキストしか想定していない。いろんなパターンに対応するなら、クラスを作ってレポートオープン時に項目を指定してフォントサイズやマージンの初期値を保持し、印刷時に実行するのが良いと思う。
Sub ShrinkToFit(ctl As Control, ByVal FontSize As Integer)
Dim BaseHeight As Integer
    With CodeContextObject
        .FontName = ctl.FontName
        .FontSize = FontSize
        .FontBold = ctl.FontBold
        .FontItalic = ctl.FontItalic
        .FontUnderline = ctl.FontUnderline
        BaseHeight = .TextHeight(ctl.Value)
        '文字が切れた場合があったので-50で調整
        Do Until .TextWidth(ctl.Value) < (ctl.Width - ctl.LeftMargin - ctl.RightMargin - 50) Or .FontSize = 1
            .FontSize = .FontSize - 1
        Loop
        ctl.FontSize = .FontSize
        ctl.TopMargin = (BaseHeight - .TextHeight(ctl.Value)) \ 2
    End With
End Sub
posted by 忘却の達人 at 23:07| Comment(0) | TrackBack(0) | Access | このブログの読者になる | 更新情報をチェックする

2010年04月10日

クリップボードにhtml形式でコピー

クリップボードにhtml形式でコピーするには、RegisterClipboardFormat('HTML Format')でフォーマット番号を取得(登録)し、以下の形式で設定する。文字コードはUTF-8。
赤字部分にはそれぞれの位置(offset)をバイト単位で指定する。
Version:0.9
StartHTML:00000000
EndHTML:00000000
StartFragment:00000000
EndFragment:00000000
<html><body>
<!--StartFragment-->
html本文
<!--EndFragment-->
</body></html>
posted by 忘却の達人 at 10:23| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2010年04月07日

JavaScript:マウスのクリック位置を取得

JavaScriptでマウスのクリック位置をクリックした要素のClient座標で取得する。
FireFox
x座標 = event.layerX - document.getElementById("img").offsetLeft;
y座標 = event.layerY - document.getElementById("img").offsetTop;

Opera, Chrome, IE
x座標 = event.offsetX;
y座標 = event.offsetY;
サンプルはこちらのページ
posted by 忘却の達人 at 22:11| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2010年04月03日

MySQL:テーブルとカラムの情報

SHOW FULL COLUMNS FROM <テーブル名>;
最初↓のSQLを書いたけど↑で十分だ。(苦笑)MySQL4でも使えるし。

MySQL5
テーブル情報は"information_schema.tables"から、カラム情報は"information_schema.columns"から取得できる。
select 
  table_name
, 0 No, table_name name
, engine `type`
, null length
, null `default`
, null isnull
, table_collation
, table_comment `comment`
, null `key`
 from information_schema.tables t
 where t.table_schema = 'データベース名'
union
select 
  t.table_name
, ordinal_position No
, column_name
, data_type
, character_maximum_length
, column_default
, is_nullable
, collation_name
, column_comment
, column_key `key`
  from information_schema.columns c
 inner join information_schema.tables t
         on c.table_name = t.table_name
 where c.table_schema = 'データベース名'
 order by table_name, No
posted by 忘却の達人 at 21:10| Comment(0) | TrackBack(0) | MySQL | このブログの読者になる | 更新情報をチェックする

2010年04月01日

Excel:VBAでシートの複数選択

ExcelでVBAでシートの複数選択をするには、配列でシートを指定する。

シート名で指定
Sheets(Array("Sheet1", "Sheet3")).Select

インデックスで指定
Sheets(Array(1, 3)).Select

但し、複数指定した場合は"Range"プロパティが使えないので、串刺しで式や値を設定するには、シートの1つに設定して、"FillAcrossSheets"メソッドで他のシートにコピーする。

× Sheets(Array(1, 2, 3)).Range("C3").Formula = "=SUM(C1:C2)"
○ Sheets(1).Range("C3").Formula = "=SUM(C1:C2)"
  Sheets(Array(1, 2, 3)).FillAcrossSheets Sheets(1).Range("C3")
posted by 忘却の達人 at 21:42| Comment(0) | TrackBack(0) | Excel | このブログの読者になる | 更新情報をチェックする

2010年03月27日

php:グローバル変数の定義

phpでグローバル変数を定義するには、変数を使用する関数内でglobal宣言する。

$name="ぐろーばる";

function prt() {
	global $name;
	print $name;
}
posted by 忘却の達人 at 12:55| Comment(0) | TrackBack(0) | php | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。