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;
ツイート | ![]() |