Bonjour,

Je suis sur un petit projet composé d'un client delphi et d'une appli php.
Le client à besoin de construire une partie de son menu en requetant l'appli php, pour afficher des liens web définis dans le portail php.
Le client recupere un flux xml de l'appli php, et le parse pour créer son menu, jusqu'a present je faisais ça au lancement du client, mais si le serveur web est long à repondre cela "bloque" l'appli.
J'ai donc voulu faire ça dans un thread, en suivant la faq delphi.

Je bloque sur l'ajout de l'item dans le menu qui me génere une violation d'accés....
voici la partie de création du menu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
    for j:=0 to xmldoc.ChildNodes.Nodes[I].ChildNodes.Count-1 do
      begin
        if xmldoc.ChildNodes.Nodes[I].ChildNodes.nodes[j].nodename='link' then
         begin
            //construit l'item menu lien web
            ItemMenu:=TMenuItem.Create(Application);
            ItemMenu.Caption:=xmldoc.ChildNodes.Nodes[I].ChildNodes.nodes[j].AttributeNodes['name'].text;
            ItemMenu.Hint:=xmldoc.ChildNodes.Nodes[I].ChildNodes.nodes[j].AttributeNodes['url'].text;
            ItemMenu.OnClick:=FicMain.Link_Browser;     
            ficmain.Menu_links.Insert(ficmain.Menu_links.Count,ItemMenu);// <= violation d'accés
            ficmain.Menu_main.MenuAdded;
         end;
       end;
Apparement quand on touche a un objet vcl il faut sortir le code qui le modifie dans une methode appelée par synchronise, donc j'ai tenté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
      procedure MenuThread.Updatemenu;
  var
  ficmain:Tf_main;
    begin
 
            ficmain.Menu_links.Insert(ficmain.Menu_links.Count,ItemMenu_org);
            ficmain.Menu_main.MenuAdded;
    end;
et remplacé les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
            ficmain.Menu_links.Insert(ficmain.Menu_links.Count,ItemMenu);
            ficmain.Menu_main.MenuAdded;
par Synchronize(Updatemenu) (ItemMenu_org est une variable de la classe du thread, que j'initialise avec ItemMenu avant d'apeller le Synchronize).

Donc si quelqu'un peut m'aiguiller merci beaucoup, je suis aussi preneur d'une eventuelle solution plus adapté à cette problematique de creation du menu au lancement

merci d'avance.