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

Delphi

 > 

Système

 > 

Exécution

 > 

Enigme pour programmateur Delphi pointu


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

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

JulioDelphi

Membre Club Administrateur CodeS-SourceS
Salut,
petites infos déjà :
1) on dit bonjour (c'est écrit dans le règlement et c'est une question de politesse, meme sur le net)
2) http://jargonf.org/wiki/programmateur - Mais ici il y a des programmeurs.

Afin de mieux aider, as tu la possibilité de poster du code ou de zipper ton projet et le mettre à disposition ?

Merci d'avance
jeudi 12 février 2009 à 11:01:32 | Re : Enigme pour programmateur Delphi pointu

cantador

Membre Club

Bonjour famjerom,
 
Pour ton souci, la propriété Enabled en revanche fonctionne.
Pour celle visible, peut-être un bug..??

cantador

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

Membre Club

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

Membre Club Administrateur CodeS-SourceS


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

JulioDelphi

Membre Club Administrateur CodeS-SourceS
Ne peut-on pas gérer ça grace au OnChange du pagecontrol ?
genre :
"si le Tabsheet.name (ou .tag) est 1,2,3 ou 4 alors bouton1.visible:=false;"
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

1 2

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 Delphi 7 et MessageDlg : problème de bouton par défaut [ par informatixo ] J'ai une confirmation de suppression que je fais à l'aide d'un MessageDlg de la manière suivante et qui fonctionne très bien ! MessageDlg('Voulez-vou


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,437 sec (3)

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