Avatar billede rrm Nybegynder
10. september 2002 - 21:07 Der er 10 kommentarer og
1 løsning

GUI via api..

Jeg har oprettet et vindue via api-metoden og kaldt det MainWnd, oven på vindue har jeg brugt et static felt som ramme. Oven på denne ramme har jeg oprettet en knap. Mit spørgsmål er så: Hvordan får jeg lavet besked proceduren så der sker noget når man trykker på knappen.

Knappen bliver oprettet med:
rdbAgree := CreateWindow('button', RDB_ACCEPT_CAP, WS_CHILD or BS_AUTORADIOBUTTON or WS_VISIBLE,
                            16, 230, 337, 20, grpTerms, 0, Inst, nil);

Hvor grpTerms er navnet på rammen.
Avatar billede doc404 Novice
11. september 2002 - 22:37 #1
Din buttons parent window (grpTerms) modtager en WM_COMMAND message, hvor High word af WParam indeholde BN_CLICK og low word af WParam din buttons Id - hvilket i dit tilfælde er 0. LParam indeholder din buttons handle (rdbAgree).

Den parameter du bruger grpTerms til, skal være en handle til parent Window.

Ps : dette er skrevet ud fra min rustne hukommelse, men det er vist ok
Avatar billede rrm Nybegynder
11. september 2002 - 23:04 #2
Kan du komme med et eksempel på hvordan koden skal se ud?

WinProc er defineret sådan:
WindowProc(hWnd, uMsg,    wParam,    lParam: Integer)
Avatar billede doc404 Novice
11. september 2002 - 23:26 #3
I din WinProc har du som regel en stor case, der håndtere alle messages.

case uMsg of
  ..
  WM_COMMAND:
      begin
        if hiword(wParam) = BN_CLICKED then
          case loword(wParam) of
            0: MessageBox(0,'Tryk på din knap','davs',MB_OK);
            1: // en anden knap...
          end;
      end;
  ....
end;
Avatar billede rrm Nybegynder
11. september 2002 - 23:46 #4
Hmm. Det virker fint for knapperne på formen, men for knapper inde i rammerne sker der intet...

Her er den kode jeg bruger til at oprette hovedvinduet, rammen og radio boxen inde i rammen:

MainWnd := CreateWindowEx(WS_EX_WINDOWEDGE, 'MainWindow', PChar(APP_TITLE),
                          WS_BORDER or WS_SYSMENU,
                          CenterH(PRO_WIDTH), CenterV(PRO_HEIGHT), PRO_WIDTH, PRO_HEIGHT, 0, 0, Inst, nil);

  grpTerms := CreateWindow('Static', nil, WS_CHILD or SS_ETCHEDFRAME,
                            GRP_LEFT, GRP_TOP, GRP_WIDTH, GRP_HEIGHT, MainWnd, 0, Inst, nil);

  rdbAgree := CreateWindow('button', RDB_ACCEPT_CAP, WS_CHILD or BS_AUTORADIOBUTTON or WS_VISIBLE,
                            16, 230, 337, 20, grpTerms, 0, Inst, nil);
Avatar billede doc404 Novice
11. september 2002 - 23:50 #5
Når du opretter knappenerne i rammen, angiver du Rammen som main window. Du skal angive main window istedet.

rdbAgree := CreateWindow('button', RDB_ACCEPT_CAP, WS_CHILD or BS_AUTORADIOBUTTON or WS_VISIBLE,
                            16, 230, 337, 20, >>>>MainWnd<<<<<, 0, Inst, nil);
Avatar billede doc404 Novice
11. september 2002 - 23:53 #6
øhhh...vent lige lidt.

virker det hvis du opretter en anden knap type i rammen? Altså IKKE en BS_AUTORADIOBUTTON, men f.eks. en alm. BS_BUTTON?
Avatar billede rrm Nybegynder
11. september 2002 - 23:55 #7
Ok. Grunden til at jeg erklærede den inden i rammen var at den så blev skjult når hele rammen blev skjult. Er det overhovedet ikke muligt at få det til at virke på "min" måde???
Avatar billede doc404 Novice
11. september 2002 - 23:58 #8
Ja da..Med en masse kode ;-)

Du har jo nok valgt den mest besværlige måde at arbejde med WIndow på... Er der nogen speciel grund til IKKE at bruge Delphi forms etc?
Avatar billede rrm Nybegynder
12. september 2002 - 00:03 #9
Tja, pga af størrelsen af filen, hvis jeg bruger VCL fylder den omkring 350 kb mens den anden metode kun bruger ca. 50 kb. Programmet er en skabelon til en installer, hvilket efter min mening skal fylde så lidt som muligt...
Avatar billede rrm Nybegynder
12. september 2002 - 00:07 #10
Men tak alligevel....
Avatar billede doc404 Novice
12. september 2002 - 00:11 #11
Kom i tanke om denne website. Der er helt sikker noget, der kan gøre live lidt nemmere for dig

http://bonanzas.rinet.ru/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester