Avatar billede sammy Nybegynder
02. september 2002 - 13:21 Der er 2 kommentarer og
1 løsning

Menuitem "Windows" (Borland C++ Builder 5)

Jeg kunne godt tænke mig at lave menuitem'et Windows, som der er i så mange andre apps, altså hvor menulisten er dynamisk mht. til hvor hvilke vinduer der er åbne. Men hvordan virker det? Lad os antage at jeg laver en MDIParent med to MDIChilds, laver en menu og sætter "windows-templaten" ind. Jeg kan godt få vinduerne ind i listen, men kan ikke lave funktioner til items der ikke findes (før vinduerne åbnes)

Nogen forslag?

Mvh Sammy
Avatar billede soepro Nybegynder
02. september 2002 - 15:04 #1
Det er meget simpelt - du skal blot sætte 'WindowsMenu' property'en på din masterform til at pege på dit 'Windows' menu-item, så er den kringlet.

Du kan også gøre det ved at skrive følgende i din materform's constructor:

__fastcall TForm1::TForm1(TObject *Owner) : TForm(Owner)
{
  WindowMenu = Windows1;
}
Avatar billede soepro Nybegynder
02. september 2002 - 15:15 #2
Hvsi dele af din menu skal være dynamisk alt efter hvor mange af dine "Children" som er aktive, skal du ind og have fat i 'OnClick' event'en på selve 'Windows' hovedmenu, og derindefra pille ved undermenuernes 'Visible' property.

Lad os antage at førnævnte Windows menu (så default vil komme til at hedde Windows1) har to undermenu-items (udover dem som automatisk kommer på når MDIChild'ne er aktive:

Funktion 1 (Menuitem'et kommer til at hedde Funktion11)
Funktion 2 (Menuitem'et kommer til at hedde Funktion21)

Din OnClick handler til Windows1 skal så se sådan her ud:

void __fastcall TForm1::Windows1Click(TObject *Sender)
{
  if (ChildForm1 != NULL)
    Funktion11->Visible = true;
  else
    Funktion11->Visible = false;
  if (ChildForm2 != NULL)
    Funktion21->Visible = true;
  else
    Funktion21->Visible = false;
}

idet jeg antager at dine (i dette eksempel) to forskellige MDIChild forme har hver sit navn. Du skal huske i OnClose event'en på dine MDIChild forme at sætte CloseAction til caFree og NULL'e den globale pointer til formen, hvis do. skal virke:

void __fastcall TChildForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action    = caFree;
  ChildForm1 = NULL; 
}

void __fastcall TChildForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action    = caFree;
  ChildForm2 = NULL; 
}
Avatar billede sammy Nybegynder
03. september 2002 - 08:17 #3
Jeg takker, det var lige præcis det jeg skulle bruge =)

Mvh Sammy
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