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:
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
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;
et remplacé les lignes
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;
par Synchronize(Updatemenu) (ItemMenu_org est une variable de la classe du thread, que j'initialise avec ItemMenu avant d'apeller le Synchronize).
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;
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.
Partager