Accueil > Forum > > > > Probleme de Parent
Probleme de Parent
mardi 5 septembre 2006 à 10:27:49 |
Probleme de Parent

anisb
|
Bonjour à tous, Je vais essayer d'être clair... 1) Mon projet contient une Form: dans le formCreate, j'instancie un certain nombre de Panel dont le Owner et le Parent est la Form. Dans le Create des Panels, j'utilise des fonctions qui font appels au canvas du Panel et tout ce passe bien (car le Parent est bien positionné avant l'utilisation de ces fonctions ). 2) J'ai changé certaines choses : maintenant, j'ai décidé de placer tous les composants qui étaient sur la Form dans un Panel. Ce Panel Englobant est instancié dans le FormCreate de la Form. Le Parent et le Owner de ce Panel est la Form. Les Panels Englobés sont instanciés dans le Panel Englobant, leur Owner et leur Parent seront donc le Panel Englobant. Mais maintenant, ça plante à l'éxecution lorsque j'arrive sur des instructions qui font appels au Canvas des Panels Englobés. Et je ne comprends pas ce qui se passe... N.B : Toutes les créations sont éffectuées en Run Time (à l'éxécution) et non en Design Time (Conception)
Quelqu'un pourrait-il m'aider? Amicalement, Anis B.
|
|
mardi 5 septembre 2006 à 11:02:56 |
Re : Probleme de Parent

Loda
|
salut,
t'as posé ta question de manière très clair. bravo.
Et, pour moi du moins, tu instancies correctement tes panels. Ca devrait marcher.
Pourrais tu nous indiquer l'erreur (message et emplacement)? une AV?
Pour contourner le problème, peut-être pourrais-tu executer ton code sur le canvas dans le formShow et non le form create. (vu que de toute façon le canevas ne serra pas visible avant et redessiner au pèremier affichage)
un test qui marche chez moi (pas d'erreur au runtime):
unit CanvasTest_frm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type TPanelACESS = class (TPanel); // to access to protected .Canvas
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
pnl1, pnl2 : TPanelACESS;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var r : trect;
begin
pnl1 := TPanelACESS.Create(self);
pnl1.Parent := self;
pnl1.SetBounds(10,10,200,200);
pnl2 := TPanelACESS.Create(pnl1);
pnl2.Parent := pnl1;
pnl2.SetBounds(10,10,100,100);
r.Left := 10;
r.right := 20;
r.top := 10;
r.bottom := 20;
pnl1.Canvas.Brush.Color := clRed;
pnl1.Canvas.FillRect(r);
end;
end.
bon code,
|
|
mardi 5 septembre 2006 à 11:10:55 |
Re : Probleme de Parent

anisb
|
Bonjour et merci pour la rapidité de ta réaction.
Le code que tu viens de poster est effectivement le cas que nous avions auparavant, et ça marchait bien. C'est lors de l'appel d'une fonction de Canvas sur le sous panel pnl2 que ça ne fonctionnerait pas.
Voici un exemple de ce qui ne marche pas:
Form.FormCreate( Sender : TObject ); begin Panel1 := TMonPanel.Create( Self ); Panel1.Parent := Self; Panel1.PanelCreate; end;
TMonPanel.PanelCreate; begin SousPanel := TMonSousPanel.Create( Self ); SousPanel.Parent := Self; SousPanel.PanelCreate; end;
TMonSousPanel.PanelCreate; var h : integer; begin h := Canvas.TextWidth('Test'); // Plantage à l'appel de cette instruction end;
L'erreur est une violation d'accès lorsqu'on utilise les
fonctions du Canvas : mais le Canvas n'est pas nil.
|
|
mardi 5 septembre 2006 à 11:56:45 |
Re : Probleme de Parent

Loda
|
ho,
désolé, j'ai mis pnl1 dans le test.... *sleepy*
notes que si ton seul problème est des trucs genre TextWidth, tu peux appeler ces methode depuis un autre canvas. si la font est la même, t'aurras le même resultat.
avec ton exemple:
pnl2.Canvas.Brush.Color := clRed;
pnl2.Canvas.FillRect(r);
ShowMessage('[Debug] ' + inttostr(pnl2.Canvas.TextWidth('Test')));
fonctionne aussi. "21" si tu veux savoir ;-)
pourrais tu essayer ce code chez toi?
as-tu essayer de mettre un break point sur l'appel et de faire du "trace into"? si tu trouve ou ça crash exactement, ça pourrait aider.
|
|
mardi 5 septembre 2006 à 18:16:12 |
Re : Probleme de Parent

Delphiprog
|
Je suis d'accord avec Loda, pour une fois, la question est bien posée  Le problème ne se situerait-il pas ici ? TMonPanel.PanelCreate; begin SousPanel := TMonSousPanel.Create( Self ); SousPanel.Parent := Self; SousPanel.PanelCreate; end;Chaque composant visuel créé sur une fiche a comme propriétaire la fiche. Par conséquent, tout en gardant une souplesse dans le code, tu peux donc écrire : TMonPanel.PanelCreate; begin SousPanel := TMonSousPanel.Create( Self.Owner ); SousPanel.Parent := Self; SousPanel.PanelCreate; end;
Ce qui a pour effet de ne pas rendre ton composant TMonPanel dépendant d'une classe nommée TForm1. May Delphi be with you !
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
|
|
mardi 5 septembre 2006 à 21:17:32 |
Re : Probleme de Parent

f0xi
|
Deja separe les Classe TMonPanel et TMonSousPanel de l'unitée de la fiche ce serat 100 fois mieux. Ensuite, tu devrais lister les tpanel pour pouvoir y acceder plus facilement. Sois en utilisant une TList, sois avec les TCollection, TCollectionItem. De plus cela faciliteras les creations/liberations, avec des fonctions Add et Delete, sans parler de l'indexation des TPanel qui faciliteras l'accés a ces derniers, comme cela on obtient un contenant principal et des objet pouvant contenir a leurs tours des objets, un peu dans l'esprit d'un TTreeView. aprés tout depend des besoins. Croc (click me)
|
|
mercredi 6 septembre 2006 à 09:09:15 |
Re : Probleme de Parent

Loda
|
une précision:
Si tu veux faire une liste de tes Instance de panel, utilise TComponentList. C'est plein de truc très pratique.
Si t'as des gros besoins au niveau de la list des panels, crée une class descendant de TComponentList.
Comme dit F0xi, ça dépend de tes besoins
|
|
mercredi 6 septembre 2006 à 17:16:56 |
Re : Probleme de Parent

anisb
|
En fait il s'agit d'une erreur de ma part ... le plantage ne se situe pas au niveau du Canvas (j'ai dit qu'elle n'était pas Nil ) mais en fait parce que ces appels declenchent un évenement de Resize. Or ayant reimplémenté cette méthode pour resizer tous les composants de ce panel elle me fait planter... Voici ce qui se passe : MonPanel.Create --> TMonSousPanel.Create dans ce create je fais appel au fonction de canvas ---> Resize Appelée (je ne sais pas pk) --> Dans Resize j'ai des opérations sur d'autres Panels et de composants non encore crées ... donc plantage J'espère que la solution est aussi claire que la question et vous remercie pour votre aide et votre réactivité Vive DelphiFR
|
|
jeudi 7 septembre 2006 à 08:56:29 |
Re : Probleme de Parent

Loda
|
essai d'ajuter ça (sans garanti)
CanvasResize:
begin
if csLoading in self.ComponentState then exit;
// reste du code
au pire, tu te fait ton propre flag.
|
|
Cette discussion est classée dans : form, panel, parent, owner, panels
Répondre à ce message
Sujets en rapport avec ce message
panel en canvas? [ par lupoo ]
salut à tous,g un prog qui dessine une ligne elastique sur la Form, avec deux cliques de la souris, mais lorsque je rajoute un Panel, les cliques ne f
défilement dans un panel [ par apoke ]
Salut à tous,J'ai un panel sur ma form et j'aimerai mettre un certain nombre d'objet dans ce panel mais voilà j'ai trouvé aucun moyen pour intégré une
StatusBar et largeur Panel [ par apz ]
Salut,Comment, dans un StatusBar, definir la largeur des Panels selon leurs continue ?par exemple pour affichier le jour de la date, lundi n'a pas la
Personnalisation de la barre de titre [ par holomina ]
Bonjour à tous!Faisant mes premiers pas en delphi, j'aimerais personnaliser la barre de titre de mon application (notamment la couleur). Pour cela, j'
Comment bouger un form avec un Panel [ par skrypterz ]
salut !!!!Il y a une facon de faire bouger le form en cliquan sur un panel ????mon form : BorderStyle := bsNoneSkrypterZ
Impossible de focaliser une fenêtre désactivée ou invisible [ par Guillemouze ]
bien le bonjour, me revoila pour une question un peu bete mais je ne trouve pas de solution.j'ai une form qui contient plusieurs panels, qu'on peut as
Comment faire tourner un pps (Powerpoint) à l'intérieur d'un panel d'une form delphi mais pas en plein écran ? [ par malerba ]
Bonjour à tous, je voudrais savoir comment intégrer un diaporama Powerpoint dans une appli delphi de façon à ce qu'il occupe qu'une seule partie d'une
[TMediaplayer] Problème d'affichage dans un PANEL sous XP ? [ par SunOf ]
Bonjour à tous,
Refresh d une form [ par mimimou ]
Bonjour a tous, Au lancement de mon exe, j ai un OpenDialog1 qui s execute avant la fin de l affichage de ma form principale.Comment je peux faire e
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|