Toon posts:

[Delphi] AboutBox (Win32 API) weergeven

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag met Win32 API functies (Delphi6) een "ShowModal" AboutBox op het scherm krijgen.
Ik heb in de Win32 API help gevonden dat dat kan met de functie "CreateDialogIndirect(DlgTemplate:TDlgTemplate)".

Als ik deze functie gebruik (zie de code onderaan deze post) dan werkt 't alleen als ik de variabele "DlgTemplate" globaal maak (dat is in de "var" list van een unit) en als de variabele "DlgTemplate" ook nog eens aan het einde van de globale variabelen lijst staat, d.w.z.
code:
1
2
3
var B:Byte;
    I:integer;
    DlgTemplate:TDlgtemplate;

en niet...
code:
1
2
3
var B:Byte;
    DlgTemplate:TDlgtemplate;
    I:integer;

Om de DialogBox "ShowModal" weer te geven, disable ik het parent window met de functie "EnabledWindow".

Nu wil ik eigenlijk graag de code in één procedure kunnen zetten... (met bijv. DlgTemplate als lokale variabele)

Kan me misschien iemand zeggen wat ik fout doe (en wat ik dus eventueel anders moet doen...)???????????????????

In de Win32 API help staat iets van "variabele arrays" toevoegen, maar ik weet niet of dat nodig is (en indien wel nodig, ook niet hoe ik dat zou moeten doen...)

Nu heb ik de volgende code gebruikt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var hWnd:THandle;
    DlgTemplate:TDlgTemplate;

Function DialogProcedure(hWnd:THandle;Message:Integer;wParam:WPARAM;lParam:LPARAM):Boolean;Stdcall;
Begin
//Afhandeling van de Dialog messages.
End;

Procedure DialogMaker;
Begin
DlgTemplate.style:=WS_SYSMENU or WS_VISIBLE;
DlgTemplate.dwExtendedStyle:=WS_EX_TOOLWINDOW;
DlgTemplate.cdit:=0;
DlgTemplate.x:=0;
DlgTemplate.y:=0;
DlgTemplate.cx:=150;
DlgTemplate.cy:=110;
CreateDialogIndirect(hInstance,DlgTemplate,hWnd,@DialogProcedure);
End;

Thanx :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

* Creepy zal wel weer een open deur intrappen hoor,
maaruh.. wat is er mis met Tform.showmodal?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Op donderdag 24 januari 2002 20:26 schreef Creepy het volgende:
* Creepy zal wel weer een open deur intrappen hoor,
maaruh.. wat is er mis met Tform.showmodal?
Er is niets mis met TForm.ShowModal...
Maar, ik gebruik TForm bij deze vraag helemaal niet, het is een Win32 API vraag... :)

Verwijderd

Op de volgende manier zet je 6 $00 bytes achter de TDlgTemplate:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  function ShowWindow(ADlgTemplate: TDlgTemplate): HWnd;
  var
    P: PChar;
  begin
    GetMem(P, SizeOf(TDlgTemplate) + 6);
    try
    FillChar(P^, SizeOf(TDlgTemplate) + 6, 0);
    Move(ADlgTemplate, P^, SizeOf(TDlgTemplate));
    Result := CreateDialogIndirect(hInstance, PDlgTemplate(P)^, Handle,
      @DialogProcedure);
    finally
    FreeMem(P);
    end;
  end;

edit:

Code verbeterd.

Verwijderd

Topicstarter
DiFool: Thanx very much 4 the help :) :) :)