IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Pb de creation et destruction de tabsheet dynamique


Sujet :

Composants VCL Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Pb de creation et destruction de tabsheet dynamique
    Bonjour je realise un client de chat celui ci fonctionne mais j ai un petit soucis qd j essaye de mettre une couleur personnalisable.
    J'ai créer un Tframe avec ts les composants necessaires a mon PV (Prive).
    Ce Tframe est inclus dynamiquement dans mon Tpagecontrol.
    J'ai mis une procedure (code plus bas ) pour ouvrir ces PVs .
    Avant la gestion de la couleur je me contenter de cacher le tabsheet du prive lorsque celui ci etait fermer mais l utilisation de la couleur me force a le detruire:
    Pagecontrol ownerdraw=true et je reecris dans le canvas le caption de l onglet mais si je cache le tabsheet ca decale tout.

    J' ai donc mis sur le bouton de fermeture du PV le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     formchat.PageControlChat.Pages[formchat.PageControlChat.ActivePageIndex].Destroy;
     formchat.PageControlChat.ActivePageIndex:=4;
    Ce code me ferme bien le PV mais me genere une erreur 'violation d'acces' meme en essayant de la camoufler avec un try except;
    Ici j indique la procedure d'ouverture dynamique car je pense que le probleme peut venir de la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    procedure OuvrirPV(Pseudo,sexe:string; ActivePV: Boolean;nbpv2:integer);
    var
      NewPV: TTabSheet;
      NewPVFrame: TFrame1;
    begin
      NewPV := TTabSheet.Create(FormChat.PageControlChat);
      NewPV.PageControl := FormChat.PageControlChat;
      NewPv.PageIndex:=nbonglet+nbpv;
      NewPVFrame := TFrame1.Create(NewPV);
      NewPVFrame.Parent := NewPV;
      NewPVFrame.Align := alClient;
      NewPVFrame.EditSaisiePv.Clear;
      NewPVFrame.RxRichEditPv.Clear;
      NewPV.Caption := Pseudo;
      NewPVFrame.groupboxpv.Caption := 'Dialogue en prive avec '+pseudo;
      NewPvFRame.Labelnbpv.Caption:=inttostr(Nbpv2);;
      Setlength(PriveOuvert,Length(PriveOuvert)+1);
      PriveOuvert[Length(PriveOuvert)-1].Nom:=Pseudo;
      PriveOuvert[Length(PriveOuvert)-1].Pointeur:=addr(NewPVFrame.Edittemppv);
      PriveOuvert[Length(PriveOuvert)-1].sexe:=sexe;
      priveouvert[Length(PriveOuvert)-1].posrichpv:=0;
      PriveOuvert[Length(PriveOuvert)-1].Pointeur2:=addr(NewPVFrame.webbrowserpv);
      nbpv:=nbpv+1;
      formconnect.ClientSocket1.Socket.SendText('17'+#09+pseudo+#13#10);
      if ActivePV
      then begin
        FormChat.PageControlChat.ActivePageIndex := NewPV.PageIndex;
        FormChat.PageControlChat.Invalidate;
        exit;
      end else begin
        NewPV.Highlighted := True;
        FormChat.PageControlChat.Invalidate;
        exit;
      end;
    end;

    Si quelqu un a une idee qui pourrait m aider a avancer ...
    Merci


    Unformatic

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Je ne sais pas si va t'avancer, mais pourquoi utilises-tu Destroy ?
    Citation Envoyé par Aide Delphi
    N'appelez pas directement Destroy dans une application.Appelez plutôt Free.Free vérifie que la référence TPageControl n'a pas la valeur nil avant d'appeler Destroy. Destroy libère l'objet TList qui stocke les pages du contrôle puis appelle le destructeur hérité.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Free test
    En effet avec free j ai moins d erreur:
    la premiere fermeture s effectue sans accroc mais la seconde me provoque la meme erreur et les suivantes egalement.
    A noter que avec destroy j avais une erreur sur la premiere fermeture et pas toujours sur les suivantes.
    C'est deja un bon progres.
    Peut etre autre chose m echappe ?

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    Salut

    C'est quoi ton histoire de decalage si ce n'est que les
    tabulation
    voila la façon de le contourner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Type
       TAckPC = class (TPageControl)
       end;
     
    procedure TMyform.pagecontrolnDrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    var
      TabText: string;
      P: TPageControl;
      OutRect : TRect;
    begin
     p :=   Control as TPageControl ;
     TabText := TAckPC(P).Tabs[TabIndex];
     OutRect := Rect;
     InflateRect (OutRect, -3, -3);
     OutRect.Left := OutRect.Left + 3;
     if Active Then
       P.Canvas.Font.Color := clred 
     else
       P.Canvas.Font.Color := clBlack;
     
     DrawText (Control.Canvas.Handle,
        PChar ( TabText),
        Length (TabText),
        OutRect, dt_Left or dt_SingleLine or dt_VCenter);
    end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    En effet avec ce code pu de decalage donc je n ai plus a destroy ou free mes tabsheet.
    Le seul detail c que dans ce script la couleur depend si l onglet est active ou non et que moi je varié la couleur qd l onglet est highligthed si ca interresse qqun d autre g modifier le code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if tackpc(p).Pages[tabindex].Highlighted Then
       P.Canvas.Font.Color := clyellow
     else
       P.Canvas.Font.Color := couleurtexte;
    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création de TabSheet dynamiquement
    Par Jayceblaster dans le forum Delphi
    Réponses: 1
    Dernier message: 09/08/2006, 08h06
  2. [TPageControl] Ajouter un tabsheet dynamiquement
    Par qi130 dans le forum Langage
    Réponses: 6
    Dernier message: 29/09/2005, 20h57
  3. problème de destruction de composants dynamique
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 23/08/2005, 10h39
  4. Creation et destruction de figures
    Par scifire dans le forum Composants
    Réponses: 4
    Dernier message: 12/07/2005, 10h58
  5. [VB6] creation et gestion de contrôle dynamique
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 23/04/2004, 00h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo