掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ダイアログボックス作成の時規定クラス以外について (ID:13272)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
DLGITEMTEMPLATEのクラス配列の第一要素$FFFF以外で作成するにはどうすればいいですか、下記にプログラムを列記いたします まずクラス配列の第一要素$FFFFで procedure TForm1.OkClick(Sender: TObject); var MemStream1: TMemoryStream; DlgTmpl: TDlgTemplate; DlgItmTm: TDlgItemTemplate; Wd1: Word; WideStr1: WideString; i:integer; procedure AlignMemStrm32; var Mod1: Integer; begin Mod1 := (Integer(MemStream1.Memory)+MemStream1.Position) mod 4; if Mod1 <> 0 then MemStream1.Position := MemStream1.Position + (4-Mod1); end; begin MemStream1 := TMemoryStream.Create; try DlgTmpl.style := WS_POPUP or WS_BORDER or WS_SYSMENU or DS_3DLOOK or DS_MODALFRAME or WS_CAPTION or DS_CENTER or DS_SETFONT; DlgTmpl.dwExtendedStyle := 0; DlgTmpl.cdit := 2; DlgTmpl.x := 10; DlgTmpl.y := 20; DlgTmpl.cx := 120; DlgTmpl.cy := 90; MemStream1.WriteBuffer(DlgTmpl, SizeOf(DlgTmpl)); Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'テストダイアログ'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); Wd1 := 11; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'MS Pゴシック'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; DlgItmTm.style := WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON; DlgItmTm.dwExtendedStyle := 0; DlgItmTm.x := 14; DlgItmTm.y := 70; DlgItmTm.cx := 38; DlgItmTm.cy := 12; DlgItmTm.id := IDOK; MemStream1.WriteBuffer(DlgItmTm, SizeOf(DlgItmTm)); Wd1 := $FFFF; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); Wd1 := $80; //button Class Control MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'OK'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); AlignMemStrm32; DlgItmTm.style := WS_CHILD or WS_VISIBLE or ES_LEFT or ES_AUTOHSCROLL; DlgItmTm.dwExtendedStyle := 0; DlgItmTm.x := 8; DlgItmTm.y := 10; DlgItmTm.cx := 100; DlgItmTm.cy := 9; DlgItmTm.id := 200; MemStream1.WriteBuffer(DlgItmTm, SizeOf(DlgItmTm)); Wd1 := $FFFF; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); Wd1 := $81; //Edit Class Control MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'A Dialog Edit'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); if DialogBoxIndirect(hInstance, PDLGTEMPLATE(MemStream1.Memory)^, Handle, @DialogFunc) = -1 then RaiseLastOSError; finally FreeAndNil(MemStream1); end; end; それとクラス配列の第一要素$FFFF以外で procedure TForm1.NgClick(Sender: TObject); var MemStream1: TMemoryStream; DlgTmpl: TDlgTemplate; DlgItmTm: TDlgItemTemplate; Wd1: Word; WideStr1: WideString; i:integer; procedure AlignMemStrm32; var Mod1: Integer; begin Mod1 := (Integer(MemStream1.Memory)+MemStream1.Position) mod 4; if Mod1 <> 0 then MemStream1.Position := MemStream1.Position + (4-Mod1); end; begin MemStream1 := TMemoryStream.Create; try DlgTmpl.style := WS_POPUP or WS_BORDER or WS_SYSMENU or DS_3DLOOK or DS_MODALFRAME or WS_CAPTION or DS_CENTER or DS_SETFONT; DlgTmpl.dwExtendedStyle := 0; DlgTmpl.cdit := 2; DlgTmpl.x := 10; DlgTmpl.y := 20; DlgTmpl.cx := 120; DlgTmpl.cy := 90; MemStream1.WriteBuffer(DlgTmpl, SizeOf(DlgTmpl)); Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'テストダイアログ'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); Wd1 := 11; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'MS Pゴシック'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; DlgItmTm.style := WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON; DlgItmTm.dwExtendedStyle := 0; DlgItmTm.x := 14; DlgItmTm.y := 70; DlgItmTm.cx := 38; DlgItmTm.cy := 12; DlgItmTm.id := IDOK; MemStream1.WriteBuffer(DlgItmTm, SizeOf(DlgItmTm)); Wd1 := $FFFF; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); Wd1 := $80; //button Class Control MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); WideStr1 := 'OK'; MemStream1.WriteBuffer(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); AlignMemStrm32; DlgItmTm.style := WS_CHILD or WS_VISIBLE or ES_LEFT or ES_AUTOHSCROLL; DlgItmTm.dwExtendedStyle := 0; DlgItmTm.x := 8; DlgItmTm.y := 10; DlgItmTm.cx := 100; DlgItmTm.cy := 9; DlgItmTm.id := 200; MemStream1.WriteBuffer(DlgItmTm, SizeOf(DlgItmTm)); WideStr1 := 'CustButton'; MemStream1.Write(WideStr1[1], (Length(WideStr1)+1) shl 1); WideStr1 := 'User1'; MemStream1.Write(WideStr1[1], (Length(WideStr1)+1) shl 1); AlignMemStrm32; Wd1 := 0; MemStream1.WriteBuffer(Wd1, SizeOf(Wd1)); if DialogBoxIndirect(hInstance, PDLGTEMPLATE(MemStream1.Memory)^, Handle, @DialogFunc) = -1 then RaiseLastOSError; //システムエラー。コード:1407 finally FreeAndNil(MemStream1); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.