Avatar billede cautoo Nybegynder
07. marts 2002 - 12:21 Der er 7 kommentarer og
1 løsning

Menuer

Jeg har på et tidspunkt fået sådan her et script:
procedure SetMenuItemCap(Menu: HMENU; Item: Integer; NewCap: string);
var
  Info: TMenuItemInfo;
begin
  FillChar(Info, SizeOf(Info), #0);
  Info.cbSize := SizeOf(Info);
  Info.fMask := MIIM_TYPE;
  GetMenuItemInfo(Menu, Item, True, Info);
  Info.dwTypeData := PChar(NewCap);
  Info.cch := Length(PChar(Info.dwTypeData));
  SetMenuItemInfo(Menu, Item, True, Info);
end;

procedure TMain.Button1Click(Sender: TObject);
var
  Win, Menu, Edt: HWND;
begin
  //Åbn notesblok, hvis den ikke er det!
  Win := TProg(VProgs.Selected.Data).Handle;

  //Sæt caption
  SetWindowText(Win, PChar('Hejsa notepad!!'));

  //Sæt menu-items
  Menu := GetMenu(Win);
  SetMenuItemCap(Menu, 0, 'Menu1');
  SetMenuItemCap(Menu, 1, 'Menu2');
  SetMenuItemCap(Menu, 2, 'Menu3');
  SetMenuItemCap(Menu, 3, 'Menu4');
  SetMenuItemCap(GetSubMenu(Menu, 0), 0, 'Ny (modificeret)...');
  DrawMenuBar(Win);

  //Skriv tekst...
  //Clean up
  UpdateWindow(Win);
end;

som går ind og ændrer menunavnene i et program, men hvordan kan jeg få afvide om hvad menuens caption allerede er??

(PS: Det jeg havde tænkt mig, var at lave en tropist kopi af en menu i mit eget program, giver gerne flere points (60) hvis der er en der vil lave det for mig) :--))
Avatar billede ziron Nybegynder
07. marts 2002 - 12:29 #1
procedure SetMenuItemCap(Menu: HMENU; Item: Integer; NewCap: string);
var
  Info: TMenuItemInfo;
begin
  FillChar(Info, SizeOf(Info), #0);
  Info.cbSize := SizeOf(Info);
  Info.fMask := MIIM_TYPE;
  GetMenuItemInfo(Menu, Item, True, Info);
  Info.dwTypeData := PChar(NewCap); <-- Her sætter du jo caption hvad med at prøve, og så kan du jo lave lidt omvendt vel :)

  Info.cch := Length(PChar(Info.dwTypeData));
  SetMenuItemInfo(Menu, Item, True, Info);
end;

/ZIRON
Avatar billede cautoo Nybegynder
07. marts 2002 - 12:40 #2
jeg har prøvet at skrive sådan her:
function SetMenuItemCap(Menu: HMENU; Item: Integer; NewCap: string) : PChar;
var
  Info, info1: TMenuItemInfo;
begin
  FillChar(Info, SizeOf(Info), #0);
  Info.cbSize := SizeOf(Info);
  Info.fMask := MIIM_TYPE;
  GetMenuItemInfo(Menu, Item, True, Info);
  Info1 := Info;
  Info1.dwTypeData := PChar(NewCap);
  result := Info.dwTypeData;
  Info1.cch := Length(PChar(Info.dwTypeData));
  SetMenuItemInfo(Menu, Item, True, Info1);
end;


procedure TMain.Button1Click(Sender: TObject);
var
  Win, Menu, Edt: HWND;
begin
  //Åbn notesblok, hvis den ikke er det!
  Win := TProg(VProgs.Selected.Data).Handle;

  //Sæt caption
  SetWindowText(Win, PChar('Hejsa notepad!!'));

  //Sæt menu-items
  Menu := GetMenu(Win);
  Edit1.text := Edit1.text + SetMenuItemCap(Menu, 0, 'Menu1');
  Edit1.text := Edit1.text + SetMenuItemCap(Menu, 1, 'Menu2');
  Edit1.text := Edit1.text + SetMenuItemCap(Menu, 2, 'Menu3');
  Edit1.text := Edit1.text + SetMenuItemCap(Menu, 3, 'Menu4');
  Edit1.text := Edit1.text + SetMenuItemCap(GetSubMenu(Menu, 0), 0, 'Ny (modificeret)...');
  DrawMenuBar(Win);

  //Skriv tekst...
  //Clean up
  UpdateWindow(Win);
end; men det virker ikke
Avatar billede cautoo Nybegynder
07. marts 2002 - 12:41 #3
eller rettere, DET virker men så for jeg den nye indstilling, sætter jeg den ovenover virker dt ikke
Avatar billede cautoo Nybegynder
07. marts 2002 - 12:42 #4
altså hvis jeg bytter rundt på:
  Info1.dwTypeData := PChar(NewCap);
  result := Info.dwTypeData;
Avatar billede ziron Nybegynder
07. marts 2002 - 12:44 #5
jeg prøver lige selv at kigge, åbner lige en delphi mere :)

/ZIRON
Avatar billede cautoo Nybegynder
07. marts 2002 - 21:10 #6
hmm, muligt?? eller starter delphi stadig?
Avatar billede cautoo Nybegynder
12. marts 2002 - 13:30 #7
Har du fundet ud af nogte?
Avatar billede cautoo Nybegynder
13. juni 2002 - 23:56 #8
lukker
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