Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : difficile à résumer en une phrase :) [ Archives / Divers ] (nicobara)

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é 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 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 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'à TDateTime dans un StringGrid [ par notrica ] Salut,j'ai  placé un TDateTime dans un StringGrid  pour me permettre de selectionner la date à saisir. La date est séléctionnée sans problème, mais lo comment charger les items d'une syslistview d'une application externe ? [ par ramanovitch ] Bonjour a tous , je souhaite savoire comment charger le contenu d'un syslistview d'une application externe dans une liste de mon application "delph impression par TPrinter [ par Oniria ] Bonjour, voila, pour optimiser un soft, j'aimerais savoir comment utiliser le TPrinter :J'ai différent document que je peut imprimer : il ont chacun u Focus [ par Hunix2 ] Bonjour a tous et à toutes!J'aimerais savoir comment il serais possible d'ouvrir une fenêtre MDI sans que la MainForm se focus.. par exemple: lorsque S'identifier sur un site web [ par Hardouz ] Bonsoir a tous les delphiste :)je suis entrain de developpez une application qui permet d'envoyer des SMS a partir du web mais jen acune ideé (merci d Aide INDY Choix du thread lors du WriteLn [ par Nostaroth ] Bonjour! Alors voila, je voudrai realisé un Chat Multi-Client et je voudrai que depuis mon serveur, je puisse selectioné le Thread a qui envoyé le mes


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.