Fórum Criação De Wizards Para A Ide Do Delphi. #354045
19/02/2008
0
Como eu faço para que o wizard que eu to fazendo se instale num novo menu na IDE do Delphi, pq da forma que eu estou fazendo ele está sendo instalado no Menu ´Help´ do Delphi, e isso além de não ser nada elegante não me possibilita a criação de submenus.
Valeu.
Lincesmarques
Curtir tópico
+ 0Posts
19/02/2008
Host
var
EditMenu: TMenuItem;
InsertPosition: Integer;
Item: TMenuItem;
I: Integer;
begin
EditMenu := (BorlandIDEServices as INTAServices).MainMenu.Items[1];
// Move all the items from PopupMenu1 to the Edit menu,
// right after SelectAll.
// Start by finding where to insert the new item.
InsertPosition := EditMenu.Count; // default is at end of menu
for I := 0 to EditMenu.Count-1 do
if CompareText(EditMenu[I].Name, ´EditSelectAll´) = 0 then
begin
InsertPosition := I;
Break;
end;
for I := PopupMenu1.Items.Count-1 downto 0 do
begin
// Remove the item from the popup menu.
Item := PopupMenu1.Items[I];
PopupMenu1.Items.Delete(I);
// Then add it to Delphi´s menu.
EditMenu.Insert(InsertPosition, Item);
end;
Gostei + 0
19/02/2008
Host
Gostei + 0
19/02/2008
Lincesmarques
Gostei + 0
19/02/2008
Host
procedure TfrMBackup.FormCreate(Sender: TObject);
var
EditMenu: TMenuItem;
InsertPosition: Integer;
Item: TMenuItem;
I: Integer;
begin
EditMenu := (BorlandIDEServices as INTAServices).MainMenu.Items[1];
// Move all the items from PopupMenu1 to the Edit menu,
// right after SelectAll.
// Start by finding where to insert the new item.
InsertPosition := EditMenu.Count; // default is at end of menu
for I := 0 to EditMenu.Count-1 do
if CompareText(EditMenu[I].Name, ´EditSelectAll´) = 0 then
begin
InsertPosition := I;
Break;
end;
for I := PopupMenu1.Items.Count-1 downto 0 do
begin
// Remove the item from the popup menu.
Item := PopupMenu1.Items[I];
PopupMenu1.Items.Delete(I);
// Then add it to Delphi´s menu.
EditMenu.Insert(InsertPosition, Item);
end;
end;
Gostei + 0
19/02/2008
Lincesmarques
function TADPCHStickerWizard.GetIDString: string;
begin
AddMenuItem(Self);
end;
procedure TADPCHStickerWizard.AddMenuItem;
var
MainMenu: TMainMenu;
Temp, ToolsMenuItem: TMenuItem;
begin
inherited Create;
// Cria o menu.
FGExpertsTopLevelMenu := TMenuItem.Create(nil);
{$IFDEF GX_UseMenuShortCutInitializationWorkAround}
FGExpertsTopLevelMenu.OnClick := TopLevelMenuClick;
{$ENDIF GX_UseMenuShortCutInitializationWorkAround}
FGExpertsTopLevelMenu.Caption := ´Meu E&xpert´;
FGExpertsTopLevelMenu.Name := ´MeuExpert´;
// Insere o menu na IDE.
MainMenu := (BorlandIDEServices as INTAServices).MainMenu;
MainMenu.Items.Insert(MainMenu.Items.Count - 2, FGExpertsTopLevelMenu);
// Aqui vai ser inserido os sub itens do menu posteriormente
// Insere o separador (por enquanto sem uso).
Temp := TMenuItem.Create(FGExpertsTopLevelMenu);
Temp.Caption := ´-´;
Temp.Name := ´GX_Sep1´;
FGExpertsTopLevelMenu.Add(Temp);
end;
Agora vou colocar os sub itens do menu, espero :)
Gostei + 0
22/02/2008
Lincesmarques
------------------------------
unit ADWizard;
interface
uses
ToolsAPI, Windows, SysUtils, Classes, Forms, Messages, Menus;
type
TADPCHStickerWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
public
{ IOTAWizard }
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
procedure Execute;
{ IOTAMenuWizard }
function GetMenuText: string;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterPackageWizard(TADPCHStickerWizard.Create);
end;
procedure TADPCHStickerWizard.Execute;
var
i : integer;
MainMenu: TMainMenu;
MenuPrincipal: TMenuItem;
begin
inherited Create;
MainMenu := (BorlandIDEServices as INTAServices).MainMenu;
MenuPrincipal := TMenuItem.Create(nil);
MenuPrincipal.Caption := ´Me&u Wizard´;
MenuPrincipal.Name := ´Meu´;
// Insert menu in the IDE.
MainMenu.Items.Insert(9, MenuPrincipal);
end;
function TADPCHStickerWizard.GetIDString: string;
begin
Result := ´Some.MeuWizard´;
Execute;
end;
function TADPCHStickerWizard.GetMenuText: string;
begin
Result := ´Me&u Wizard´;
end;
function TADPCHStickerWizard.GetName: string;
begin
Result := ´Some.MeuWizard´;
end;
function TADPCHStickerWizard.GetState: TWizardState;
begin
Result := [wsEnabled];
end;
procedure InitWizard;
begin
// nothing needed
end;
procedure DoneWizard;
begin
// Remove
end;
initialization
InitWizard;
finalization
DoneWizard;
end.
---------------------------
Alguem poderia dar uma olhada ai? Me da um help.
Gostei + 0
06/03/2008
Ara.es
Gostei + 0
06/03/2008
Lincesmarques
Ainda continuo precisando disso.
Gostei + 0
06/03/2008
Ara.es
Gostei + 0
06/03/2008
Ara.es
Gostei + 0
06/03/2008
Lincesmarques
Gostei + 0
06/03/2008
Lincesmarques
Gostei + 0
07/03/2008
Ara.es
Uma das funções que temos que implementar, que está definida numa das interfaces, e a GetIDString que retorna o ID do seu Wizard, e nela vc chamava o metodo execute. O que creio que estava acontecendo é que o delphi deve chamar essa função sempre que renderiza o menu, e quando vc instalava ele devia estar chamando esse metodo varias vezes e executando o metodo execute tbm varias vezes. tanto que vc disse que com vc o codigo estava duplicando, na minha maquina ele nao estava duplicando e sim triplicando.. ou seja aparecida tres vezes o item.
Gostei + 0
07/03/2008
Ara.es
Veja como ficou:
unit saa;
interface
uses
ToolsAPI, Windows, SysUtils, Classes, Forms, Messages, Menus, Dialogs;
type
TADPCHStickerWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
public
{ IOTAWizard }
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
procedure Execute;
{ IOTAMenuWizard }
function GetMenuText: string;
procedure ItemClick(Sender : TObject);
end;
implementation
procedure TADPCHStickerWizard.Execute;
begin
//
end;
function TADPCHStickerWizard.GetIDString: string;
begin
Result := ´Some.MeuWizard´;
end;
function TADPCHStickerWizard.GetMenuText: string;
begin
Result := ´Me&u Wizard´;
end;
function TADPCHStickerWizard.GetName: string;
begin
Result := ´Some.MeuWizard´;
end;
function TADPCHStickerWizard.GetState: TWizardState;
begin
Result := [wsEnabled];
end;
procedure TADPCHStickerWizard.ItemClick(Sender: TObject);
begin
ShowMessage(´TADPCHStickerWizard´);
end;
procedure InitWizard;
var
i : integer;
MainMenu: TMainMenu;
MenuPrincipal: TMenuItem;
begin
MainMenu := (BorlandIDEServices as INTAServices).MainMenu;
MenuPrincipal := TMenuItem.Create(nil);
MenuPrincipal.Caption := ´Me&u Wizard´;
MenuPrincipal.Name := ´Meu´;
MenuPrincipal.OnClick := ItemClick
// Insert menu in the IDE.
MainMenu.Items.Insert(9, MenuPrincipal);
end;
procedure DoneWizard;
begin
// Remove
end;
initialization
RegisterPackageWizard(TADPCHStickerWizard.Create);
InitWizard;
end.
Ainda estou vendo umas possibilidades, qualquer coisa me escreva. Quando terminar de ver outras coisas eu posto aqui. Flw!!
Gostei + 0
07/03/2008
Ara.es
mas ou menos assim:
unit saa;
interface
uses
ToolsAPI, Windows, SysUtils, Classes, Forms, Messages, Menus, Dialogs;
type
TADPCHStickerWizard = class(TNotifierObject, IOTAWizard, IOTAMenuWizard)
public
{ IOTAWizard }
function GetIDString: string;
function GetName: string;
function GetState: TWizardState;
procedure Execute;
{ IOTAMenuWizard }
function GetMenuText: string;
procedure ItemClick(Sender : TObject);
procedure AdicionarItem;
end;
implementation
procedure TADPCHStickerWizard.AdicionarItem;
var
i : integer;
MainMenu: TMainMenu;
MenuPrincipal: TMenuItem;
begin
MainMenu := (BorlandIDEServices as INTAServices).MainMenu;
MenuPrincipal := TMenuItem.Create(nil);
MenuPrincipal.Caption := ´Me&u Wizard´;
MenuPrincipal.Name := ´Meu´;
MenuPrincipal.OnClick := ItemClick;
// Insert menu in the IDE.
MainMenu.Items.Insert(9, MenuPrincipal);
end;
procedure TADPCHStickerWizard.Execute;
begin
//
end;
function TADPCHStickerWizard.GetIDString: string;
begin
Result := ´Some.MeuWizard´;
end;
function TADPCHStickerWizard.GetMenuText: string;
begin
Result := ´Me&u Wizard´;
end;
function TADPCHStickerWizard.GetName: string;
begin
Result := ´Some.MeuWizard´;
end;
function TADPCHStickerWizard.GetState: TWizardState;
begin
Result := [wsEnabled];
end;
procedure TADPCHStickerWizard.ItemClick(Sender: TObject);
begin
ShowMessage(´TADPCHStickerWizard´);
end;
procedure InitWizard;
var
obj : TADPCHStickerWizard;
begin
obj := TADPCHStickerWizard.Create;
obj.AdicionarItem;
end;
procedure DoneWizard;
begin
// Remove
end;
initialization
RegisterPackageWizard(TADPCHStickerWizard.Create);
InitWizard;
end.
Cara acho que é isso, qualquer novidade posto aqui. Estou tentando agora: Quando chamar o wizard, através dele eu acessar o código aberto, assim como estabelecer um atalho para o mesmo. Valeu. Flw!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)