begin process at 2010 02 10 13:58:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Delphi

 > 

Archives

 > 

Divers

 > 

difficile à résumer en une phrase :)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

difficile à résumer en une phrase :)

mercredi 6 octobre 2004 à 09:23:55 | difficile à résumer en une phrase :)

nicobara

Bonjour à tous.
Voila, j'ai un problème (non sans blague), voila mon code :
procedure TFModifUtil.GestAffNiveauUtil(NiveauUtil : integer);
var i : integer;
begin
//----------------------------------------------------------------------------
// Fais appel aux fontions d'affichage de toutes les fiches de l'application
// Pour gérer les accès des utilisateurs (rendre les bp inactif...)
// efface toutes les lignes de la table TblFenetre
QueryListFiches.SQL.Clear;
QueryListFiches.sql.Add('Select * From TblFenetre');
QueryListFiches.open;
for i:=0 to QueryListFiches.RecordCount -1 do
begin
try
//TForm(application.FindComponent(QueryListFiches['NomFenetre'])).OnCreate(application.FindComponent(QueryListFiches['NomFenetre']));
TForm(application.FindComponent(QueryListFiches['NomFenetre'])).GestAffUtil(GroupUtilCourant);
except
end;
QueryListFiches.Next;
end;
end;

Dans ma base de données TblFenetre, sont listées certaine fenêtre de mon appli. Dans ces fenêtres, j'ai implenté une procedure GestAffUtil(int).
Ce que je veux, c'est :
- parcourir ma table : ca v'y arrive
- Acceder à l'objet Form : ca v'y arrive aussi
//TForm(application.FindComponent(QueryListFiches['NomFenetre'])).OnCreate(application.FindComponent fonctionne tres bien
- Faire appel à la procedure GestAffUtil : c'est là que ca coince.
Le compilateur me dit que l'indentificateur n'est pas déclaré.
Je comprend pourquoi, mais je voudrais savoir comment faire pour que ca passe, changer ma ligne de commande ou forcer le compilateur à l'accepter... la je coince.
Je souhaite pouvoir réutiliser ce code pour mes futures appli, donc la solution de lister les fenêtres une par une ne me convient pas... enfin je prefererai trouver une autre solution.
Merci pour vos réponse.
mercredi 6 octobre 2004 à 10:34:55 | Re : difficile à résumer en une phrase :)

jmp77

Membre Club
Effectivement j'ai eu le même souci. Et je suis passé par la solution de lister les fenêtres malheureusement.
Donc si quelqu'un a la solution je serai bien entendu preneur.

Désolé de pas pouvoir te dépanner.

Bonne prog,
JMP.
mercredi 6 octobre 2004 à 11:27:03 | Re : difficile à résumer en une phrase :)

nicobara

JMP, c'est pas grave, mais j'espere que qq'un d'autre pourras, ca ferrai 2 heureux :)
mercredi 6 octobre 2004 à 11:53:58 | Re : difficile à résumer en une phrase :)

Loulibier

Membre Club
salut,

si je comprends bien tu as une procedure GetAffUtil ou tu dois lui passer un integer en paramètre. De quel type est GroupUtilCourant ?

Bonne Prog,

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la validée.
mercredi 6 octobre 2004 à 12:08:08 | Re : difficile à résumer en une phrase :)

nicobara

GroupUtilCourant est un integer, mais mon pb ne viens pas de là.
Comme TForm(application.FindComponent(QueryListFiches['NomFenetre'])) est une Form "pas connu" pour le compilateur, il ne connais pas non plus GestAffUtil.
Pour essayer d'etre plus clair un exemple :
- Dans la table TblFenetre j'ai un enregistrement avec comme 'NomFenetre' => Fmafenetre
- Dans mon appli j'ai une fenetre qui s'apelle Fmafenetre, ds laquel j'ai rejouté une pocedure GestAffUtil, donc je peux faire Fmafenetre.GestAffUtil

Donc au final TForm(application.FindComponent(QueryListFiches['NomFenetre'])) = Fmafenetre
et je voudrai pouvoir faire TForm(...).GestAffUtil
mais j'y arrive pas :(
mercredi 6 octobre 2004 à 12:22:33 | Re : difficile à résumer en une phrase :)

phoenyx

salut,

c'est normal
GestAffUtil n'est pas une procedure de TForm mais de TFModifUtil (qui est un descendant de TForm)
donc ce n'est pas TForm(...).GestAffUtil qu'il faut faire mais TFModifUtil(...).GestAffUtil


PhoenyX
mercredi 6 octobre 2004 à 12:28:28 | Re : difficile à résumer en une phrase :)

Loulibier

Membre Club
Je viens de comprendre, en fait la compilation de ton programme ne se fait pas car tu essais d'appeler une procedure inexistante dans la Classe TForm. (normal )

Le problème est que Fmafenetre n'est pas une TForm, mais elle dérive de TForm. Il est donc plus judicieux de vérifier si la fenetre que tu cherche est une Tmafenetre.

exemple :

procedure TFModifUtil.GestAffNiveauUtil(NiveauUtil : integer);
var i : integer;
begin
//----------------------------------------------------------------------------
// Fais appel aux fontions d'affichage de toutes les fiches de l'application
// Pour gérer les accès des utilisateurs (rendre les bp inactif...)
// efface toutes les lignes de la table TblFenetre
QueryListFiches.SQL.Clear;
QueryListFiches.sql.Add('Select * From TblFenetre');
QueryListFiches.open;
for i:=0 to QueryListFiches.RecordCount -1 do
begin
try
//TMaFenetre(application.FindComponent(QueryListFiches['NomFenetre'])).OnCreate(application.FindComponent(QueryListFiches['NomFenetre']));
TMaFenetre(application.FindComponent(QueryListFiches['NomFenetre'])).GestAffUtil(GroupUtilCourant);
except
end;
QueryListFiches.Next;
end;
end;


Le seul Hic, c'est que si tu as crées plusieurs form avec la procedure GestAffUtil. Il te faudra tester de quel type est ton composant.

exemple :

if application.FindComponent(QueryListFiches['NomFenetre']) is TMafenetre then
TMaFenetre(application.FindComponent(QueryListFiches['NomFenetre'])).GestAffUtil(GroupUtilCourant);


Bonne Prog,

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la validée.
mercredi 6 octobre 2004 à 13:42:55 | Re : difficile à résumer en une phrase :)

nicobara

merci bien Loulibier et phoenyx
Donc si je comprend bien, comme j'ai plusieurs fenêtres j'ai deux solutions.
1- Je créer une dérivée de TForm en y ajoutant une méthode GestAffUtil (que je pourrais modifier en fonction de la form) et je déclare mes fenêtre comme faisant partie de la classe dérivée
2- Soit quand je parcoure ma table, je regarde si le composant correspondant est de type Tmafenetre 1 ou Tmafenetre2... dans ce cas là autant lister mes fenêtres.

Je débute en delphi (2semaines), la dérivation de classe ce fait "facilement"?

En tout cas merci bcp pour vos réponses aussi rapides
mercredi 6 octobre 2004 à 17:54:02 | Re : difficile à résumer en une phrase :)

nicobara

Réponse acceptée !
Héhé, j'ai trouvé une solution :

type
TExecute = procedure of object;
TFModifUtil = class(TForm)

procedure TFModifUtil.GestAffNiveauUtil(NiveauUtil : integer);
var i,j : integer;
s : string;
Routine: TMethod;
Execute: TExecute;
begin
QueryListFiches.close;
QueryListFiches.SQL.Clear;
QueryListFiches.sql.Add('Select * From TblFenetre');
QueryListFiches.open;
for i:=0 to QueryListFiches.RecordCount -1 do
begin
Routine.Code := TForm(application.FindComponent(QueryListFiches['NomFenetre'])).MethodAddress('GestAffUtil');
if Routine.Code = nil then
begin
showmessage('failed');
Exit;
end;
Execute := TExecute(Routine);
Execute;
QueryListFiches.Next;
end;
end;

Le problème c'est que dans la méhode 'GesAffUtil', de la fenêtre FGeneral (par ex), je fais :
procedure TFGeneral.GestAffUtil();
begin
//Acces à la fenetre FAccesG1
if FModifUtil.CtrlDroitUtilCourant('FAccesG1')>=1 then
BpAccesG1.Enabled := true;
else
BpAccesG1.Enabled := false;
end;

Et au niveau des textes rouge ca plante :(.
Le projet à provoqué une classe d'exception EAccessViolation...
Donc j'ai compris que ca doit venir du fait que l'objet BpAccesG1 n'ai pas instancié ou qqchose du genre.
Je precise que si aulieu de passer par un pointeur (MethodAddress) j'appele directement la méthode de la fenêtre ben ca fonctionne.

J'abuse bcp de vous mais si vous aviez encore une idée ca m'interesse :).
mercredi 6 octobre 2004 à 18:07:39 | Re : difficile à résumer en une phrase :)

nicobara

Réponse acceptée !
Dsl d'avoir poster pour rien, j'ai trouvé mon erreur :

Routine.Data := Pointer(application.FindComponent(QueryListFiches['NomFenetre']));
Routine.Code := TForm(application.FindComponent(QueryListFiches['NomFenetre'])).MethodAddress('GestAffUtil');

Enfin pas pour rien, j'espere que jmp77 aura vue la solution

1 2

Cette discussion est classée dans : application, procedure, findcomponent, nomfenetre, querylistfiches


Répondre à ce message

Sujets en rapport avec ce message

Application console et procedure [ par MoveX ] dans mon appli je suis oblige d ecrire les procedures avant quelles ne soient appelees sinon ca plante sachant que ma structure est :program ...;{$APP Directive inconnue sur une définition de procedure [ par John Dogget ] Salut à tous.Je tente d'écrire une unité qui contiendrait les quelques fonctions élémentaires pour réduire une application dans le systray ...Jusqu'à Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage Je pensais faire un Keylogger mais c pas si simple... [ par Youyou0214 ] je voudrais faire un keylogger mais je viens a peine de commencer et des problemes se posent deja. Je voulait que mon application demarre au demarrage Comment déplacer un composant TImage avec la souris lors de l'éxecution de l'application???? [ par MasterNKZ ] Comment déplacer un composant TImage avec la souris lors de l'éxecution de l'application????J'ai une source pour déplacer un composant avec la souris, Application MDI [ par Jeankiki ] Salut à tous,Je cré une application MDI, la fenêtre principal est mis comme FormStyle= fsMDIForm, mais j'aimerai mettre toutes les fenêtres dont FormS Form Child d'une application MDI [ par Bruto ] Salut,je migre de VB vers Delphi et je rencontre quelques problèmes.J'ai une Form MDI principale et deux form enfant ( child ). Le problème est que je THREADS ERREUR [ par w38 ] Bonjour,Étant donné que j'ai une application qui met un temps fou, j'ai décidéd'utiliser des threads.Toutefois, le bouquin que j'ai stipule une formul Hints dans une DLL [ par almi ] J'ai une fenêtre (TForm) qui fonctionne parfaitement dans mon executable.Si je la place dans une DLL, j'obtiens le message :Ne peut assigner TFont à T Procedure [ par apz ] Salut a tous, Quelle difference y a t-il entre declarer une procedure avec ses propres parametres et avoir des procedures avec (Sender:TObjct). et ou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales