[Delphi] wizard in Windows 2000-stijl maken

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Topicstarter
In Delphi wil ik een wizard in Windows 2000-stijl maken:
Afbeeldingslocatie: http://msdn.microsoft.com/library/en-us/shellcc/platform/art/wizard4a.jpg

Op het Microsoft Developer Network staat een artikel daarover met een voorbeeld in C++. Nou heb ik dat programma naar Delphi vertaald en het resultaat is... niets :'(. Hij verschijnt eenvoudigweg niet op mijn scherm.

Het enige wat ik kan verzinnen is dat er iets verkeerd gaat met de afhandeling van messages, maar ik heb geen enkele houvast. En er valt niets te debuggen in die wizard. Op internet kan ik alleen wat Delphi progsels vinden die zo'n wizard zo getrouw mogelijk na-apen, maar dat is niet wat ik wil. Die 'wizard API' is er immers niet voor niets.

Heeft iemand ervaring met het bouwen van wizards?

[ Voor 8% gewijzigd door Tomatoman op 27-02-2003 13:11 . Reden: link hersteld ]

Een goede grap mag vrienden kosten.


  • baggah
  • Registratie: December 2000
  • Laatst online: 06-08 22:47
Zover mijn kennis gaat zie ik niks speciaals in die code (in de vorm van een API).
Het enige wat dit stukje code doet is een applicatie zijn met een bepaald formulier(venster) dat resources uit de exe haalt en toont.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Topicstarter
Dat dacht ik ook. Voor iedere wizardpagina (aan de hand van een template en een message callback) een 'property sheet page' maken en die in een array zetten, in een recordstructuur de wizardeigenschappen definiëren, de wizard lanceren met de PropertySheet functie en klaar is tomatoman. Niet dus. PropertySheet retourneert keurig de waarde -1 (lijkt dus OK), maar er verschijnt niets op mijn scherm.

Een goede grap mag vrienden kosten.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Property Sheets maken in Delphi is vrij lastig. Je kan zelf een wizard maken dmv een TPageControl of probeer dit gratis Delphi Wizard component http://members.rogers.com/wyu66/index.htm

We adore chaos because we like to restore order - M.C. Escher


  • TUX2K
  • Registratie: September 2001
  • Laatst online: 17-08 14:23
http://www.assu-assist.nl/pgg/475.shtml staat in het kort uit gelegt hoe ja het kan doen via een PageControl.
Zelf doe ik het ook op die manier is erg makkelijk en je houdt erg veel vrijheid in hoe je wizard er uit ziet.

[ Voor 3% gewijzigd door TUX2K op 27-02-2003 14:14 ]


Verwijderd

Nou als iemand weet; waar je de tekst van Next, Previous etc. vandaan kunt halen van de geinstalleerde taal van Windows. Please tell me! :)

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Topicstarter
Zo ziet mijn code eruit:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const
  IDD_WIZARD  = 100;  // ID of dialog template

{$R wizz.RES}

function PropertySheetPageDlgProc(hDlg: HWND; uMessage: UINT;
  wParam: WPARAM; lParam: LPARAM): Boolean; stdcall;
begin
  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  psp: TPropSheetPage;
  psh: TPropSheetHeader;
  hPage: HPropSheetPage;
  Pages: array[0..0] of HPropSheetPage;
begin
  FillChar(psp, SizeOf(psp), 0);
  psp.dwSize := SizeOf(psp);
  psp.dwFlags := PSP_DEFAULT;
  psp.hInstance := HInstance;
  psp.pszTemplate := MAKEINTRESOURCE(IDD_WIZARD);
  psp.pfnDlgProc := @PropertySheetPageDlgProc;

  hPage := CreatePropertySheetPage(psp);
  Pages[0] := hPage;

  FillChar(psh, SizeOf(psh), 0);
  psh.dwFlags := PSH_WIZARD97;
  psh.hwndParent := 0;
  psh.hInstance := HInstance;
  psh.nPages := 1;
  psh.nStartPage := 0;
  psh.phpage := @Pages;

  if PropertySheet(psh) = -1 then
    MessageBeep(0); // -1 betekent: er is iets mis
end;

En dit is de RC file voor de dialog template:
C:
1
2
3
4
5
6
7
8
#define IDD_WIZARD      100

IDD_INTRO DIALOG DISCARDABLE  0, 0, 317, 143
STYLE WS_CHILD | WS_CAPTION
CAPTION "Welcome Page"
FONT 8, "MS Sans Serif"
BEGIN
END

CreatePropertySheetPage retourneert een geldige handle, terwijl PropertySheet altijd de waarde -1 geeft. -1 betekent 'je doet het verkeerd'. Maar wat dan? Ik geloof dat ik gek word 8)7

Een goede grap mag vrienden kosten.


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
je bent

psh.dwSize := SizeOf(psh);

vergeten (denk ik :) )

Wat ik ook niet helemaal snap is hoe je de resource gebruikt want met

TEST DIALOG DISCARDABLE 0, 0, 317, 143
STYLE WS_CHILD | WS_CAPTION
CAPTION "Welcome Page"
FONT 8, "MS Sans Serif"
BEGIN
END

en

psp.pszTemplate := 'TEST';

Werkt het. Dwz ik gebruik geen integer ID ofzo (ik heb de rc file gecompileerd met brcc32 op de command line)

[ Voor 75% gewijzigd door martijn_brinkers op 27-02-2003 22:08 ]


Verwijderd

Waarom kijk je niet naar de Wizard die ze gebruiken in InnoSetup; daar kun je ook zo'n Windows 2000 styl mee maken. http://www.innosetup.com

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Topicstarter
TijnFLiP schreef op 27 February 2003 @ 22:05:
je bent

psh.dwSize := SizeOf(psh);

vergeten (denk ik :) )
:X Dat is het! PropertySheet retourneert nu de waarde 0 en er flitst heel snel een venster voorbij.

Een goede grap mag vrienden kosten.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Topicstarter
Verwijderd schreef op 28 February 2003 @ 10:42:
Waarom kijk je niet naar de Wizard die ze gebruiken in InnoSetup; daar kun je ook zo'n Windows 2000 styl mee maken. http://www.innosetup.com
InnoSetup maakt net als alle andere genoemde oplossingen gebruik van een zelf ontworpen venster dat zoveel mogelijk lijkt op een native wizardvenster van Windows 2000. Het probleem bij die oplossing is dat hij er altijd uitziet als in Windows 2000, zelfs bij nieuwere besturingssystemen. Het is heel goed mogelijk dat Microsoft de layout in nieuwe Windows-versies een beetje aanpast.

Een goede grap mag vrienden kosten.


Verwijderd

Tja. Heb je in iedergeval een redenen voor update/upgrade van je programma <G>
Zo doet Microsoft het zelf ook :->
Pagina: 1