Accueil > Forum > > > > Enigme pour programmateur Delphi pointu
Enigme pour programmateur Delphi pointu
jeudi 12 février 2009 à 00:04:29 |
Enigme pour programmateur Delphi pointu

famjerom
|
Je ne suis pas vraiment un débutant en Delphi, donc je reste perplexe devant le comportement, décrit ci-dessous. Bug? ou j'ignore un principe important? Moyen de contourner? Je le soumets à votre perspicacité. J'ai créé une application fiche VCL contenant un tpagecontrol avec une page (ttabsheet).
Normalement, cette page permet de voir de fiches d'une base de données, et selon certaines conditions, un bouton peut être visible ou pas. Pour exposer le problème, j'ai simplifié au maximum pour ne garder que le bouton sur cette tabsheet.
En conception, ce bouton est déclaré invisible. et dans le formshow je mets Button1.Visible:=true; Si j'exécute le bouton est bien visible, puisque rendu visible à l'exécution.
Si maintenant, je mets le Button1.Visible:=true; dans le TabSheet1Show, le bouton reste invisible bien que l'on passe bien sur la ligne de code (vérifié avec un point d'arrêt) et que Button1.Visible est bien à true (vérifié en le faisant afficher à l'aide d'un autre bouton).
Pire. Si je mets Button1.Visible:=true; dans le tabsheet1show ET dans le formshow qui sera exécuté juste après, cette ligne n'arrive plus à faire apparaitre le bouton.
Merci de vos éclaircissements
|
|
jeudi 12 février 2009 à 09:53:57 |
Re : Enigme pour programmateur Delphi pointu
|
jeudi 12 février 2009 à 11:01:32 |
Re : Enigme pour programmateur Delphi pointu
|
jeudi 12 février 2009 à 14:42:36 |
Re : Enigme pour programmateur Delphi pointu

famjerom
|
Je ne sais pas comment mettre le zip du projet à votre disposition, mais était simplifié au maximum pour ne pas faire de parasite, je vous le mets en texte. 1. Le dfm
object Form1: TForm1 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] Height = 375 Width = 651 Left = 0 Top = 0 OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Caption = 'Label1' Left = 176 Top = 40 Width = 31 Height = 13 end object PageControl1: TPageControl ActivePage = TabSheet1 TabOrder = 0 Left = 160 Top = 128 Width = 289 Height = 193 object TabSheet1: TTabSheet Caption = 'TabSheet1' OnShow = TabSheet1Show object Button1: TButton Caption = 'Button1' TabOrder = 0 Visible = False Left = 54 Top = 32 Width = 75 Height = 25 end end end object Button2: TButton Caption = 'Button2' TabOrder = 1 Visible = False Left = 472 Top = 64 Width = 75 Height = 25 OnClick = Button2Click end end
2. le code pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls, Borland.Vcl.ComCtrls; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; Button1: TButton; Label1: TLabel; Button2: TButton; procedure Button2Click(Sender: TObject); procedure TabSheet1Show(Sender: TObject); procedure FormShow(Sender: TObject); private { Déclarations privées} public { Déclarations publiques} end; var Form1: TForm1; implementation {$R *.nfm} procedure TForm1.FormShow(Sender: TObject); begin Button1.Visible:=true; Button2.Visible:=true; end; procedure TForm1.TabSheet1Show(Sender: TObject); begin Button1.Visible:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin Label1.Caption:=booltostr(Button1.Visible); end; end.
PS1: Le bouton2 sert à afficher la proprité visible du bouton 1 (cela donne -1 pour true($FFFF) alors que le bouton est invisible)
PS2: rajouter des invalidate, des repaint, des refresh un peu partout et sur form tabsheet ou bouton n'y change rien
PS3: Dans le vrai programme (heu, logiciel? application? Je vais encore me faire engueuler moi) il y a plein de tabsheet et passer de l'un à l'autre fait que le bouton s'affiche correctement. Mais je n'ai pas réussi à le reproduire simplement dans le test joint.
PS4: Je peux faire un zip du projet pour Delphi 2005 mais je ne sais pas comment le poster.
Merci
|
|
jeudi 12 février 2009 à 14:47:10 |
Re : Enigme pour programmateur Delphi pointu

famjerom
|
Vous avez raison, enabled est pris en compte, mais ce serait plus clair pour le client que le bouton ne soit pas présent (signalisation bien visible de l'état de la fiche)
|
|
jeudi 12 février 2009 à 16:21:42 |
Re : Enigme pour programmateur Delphi pointu

cantador
|
Je ne connais pas ton problème exactement mais je te confirme avoir le même souci que toi avec la propriété visible..
Cela dit, elle fonctionne néanmoins sur le OnCreate et sur le OnShow de la forme mais pas sur le OnShow de l'onglet.. essaie avec d'autre type de boutons..
cantador
|
|
jeudi 12 février 2009 à 16:48:12 |
Re : Enigme pour programmateur Delphi pointu

f0xi
|
normal, c'est le dessins du tabsheet qui ne se fait pas aprés le changement d'etat. il te suffit de faire : Button1.visible := true; puis TabSheet1.Repaint; ou TabSheet1.Refresh; (identique a peu de choses prés) ou encore TabSheet1.Invalidate; voila. tiens nous au courant.
|
|
jeudi 12 février 2009 à 16:50:23 |
Re : Enigme pour programmateur Delphi pointu
|
jeudi 12 février 2009 à 17:29:27 |
Re : Enigme pour programmateur Delphi pointu

famjerom
|
Boujour à f0xi
le dessin du tabsheet a bien lieu car si au lieu de mettre un bouton dans le tabsheet, je mets un label, le label devient visible.
J'ai aussi mis un bouton à côté qui force un repaint (ou refresh ou invalidate)
Deuxièmement si je mets le visible = true dans le formshow qui a lieu après le tabsheetshow, le bouton est visible.
Encore plus fort, si je mets visible = true dans le formshow ET le tabsheetshow, le bouton n'apparait pas. C'est comme si le tabsheet fichait la pagaille, et que plus rien ne marchait après.
Encore plus plus fort, si je mets un deuxième tabsheet dans le pagecontrol, et qu'au lancement du programme on arrive sur ce dernier puis qu'on clique sur celui avec le bouton, il est visible (le visible=true est dans le tabsheetshow).
Tout ceci est vrai pour un bouton, un bitbtn, un panel un tedit mais pas pour un label qui fonctionne normalement.
|
|
jeudi 12 février 2009 à 18:20:03 |
Re : Enigme pour programmateur Delphi pointu

famjerom
|
Bonjour JulioDelphi,
effectivement je peux contourner le problème avec quelquechose comme
procedure sheetshowparallèle case activepage of page1:init1; page2:init2; end;
et appeler cette procédure dans le onenter et le onchange du pagecontrol.
C'est une grosse bidouille, mais ça a le mérite de fonctionner correctement.
Merci
|
|
Cette discussion est classée dans : bouton, delphi, true, visible, button1
Répondre à ce message
Sujets en rapport avec ce message
mettre de la couleur de fond dans un bouton en Delphi. [ par malmsteen ]
bonjour à tous, y a t il moyen de choisir la couleur de fond dans une des 3 categories de bases dans Delphi6(parso), sans creer un new composant?Merci
Delphi et Joystick [ par Toshiko ]
Bonjour, j'aimerai savoir s'il est possible de simuler l'appuie sur un bouton du joystick ?En fait j'aimerai pouvoir faire en sorte que le joystick éx
rajouter des composant avec un while [ par rsamourai ]
bjr tous le monde!!!! alors voici mon souci je suis debutant en delphi et j'aimerai faire aparaitre des DateTimePikers celon que la personne est choi
Objet+Stop [ par gcyberlife ]
Bonsoir,Mon problème:Pouvoir passer Stop à true sur un autre bouton permettant l'arret du calcul.Actuellement j'ai de déclaré:En global:Instance: TMaC
execution bouton en delphi [ par yomane51100 ]
bonjour je suis entrene de programmeren delphi mes le probleme je suis bloquer sur comment fait on pour mettre une action a un bouton que lon a instal
PB de Newbie à propo des conditions. aidezzzz moi ! [ par Swop ]
Bon c'est simple :procedure TForm1.Timer1Timer(Sender: TObject);beginif label1.visible := True thenlabel1.Visible := False;label2.Visible := False;els
pb avec la recherce d'une donnée dans une base oracle [ par anilane ]
je travaille avec delphi 7 et oracle 9i voila j'ai une fentre d'acces cad qu'il faux introduire le mot de pass et le nom de l'utilisateur je veux eff
Contour en surbrillance d'un Bouton (style Xp) avec DELPHI [ par kerizo ]
Bonjour,Comme sur les boutons de ce site par exemple sous Windows Xp,lorsque la souris passe par dessus, les contours dudit bouton devient coloré en s
aide delphi [ par ralhforce ]
merci de m'aider,je veux utiliser un fichier msword dans mon application, en cliquant un bouton, il ouvre automatique ça veut dire que un bouton corre
image [ par smail002 ]
salut tous ya til un petie code source pour se proget j ai trau d image dan mon proget il ya tout model mobile nokia stp donne moi tou simple c
Livres en rapport
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
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 Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System 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
|