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 :

[WndProc] inhiber Message


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    ja sais pas trop mais je pense que tu toucha pas TCustomTabControl
    dans unité comctrl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
      TPageControl = class(TCustomTabControl)
      private
        FPages: TList;
        FActivePage: TTabSheet;
        FNewDockSheet: TTabSheet;
        FUndockingPage: TTabSheet;
    .....
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       TPedroPageControl = class(TCustomTabControl)
      private
        FPages: TList;
        FActivePage: TTabpdroSheet;
        FNewDockSheet: TTabpedroSheet;
        FUndockingPage: TTabpedroSheet;
    ....
    bien sur ou se touve TTabSheet tu la remplasse par TTabpedroSheet
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      TTabSheet = class(TWinControl) par  TTabpedroSheet = class(TWinControl)
      et TPageControl par  TPedroPageControl
    pour TTabpedroSheet il est présque le meme que TTabSheet la seule différense réside dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    destructor TTabSheet.Destroy;
    begin
      if FPageControl <> nil then
      begin
        if FPageControl.FUndockingPage = Self then FPageControl.FUndockingPage := nil;
        FPageControl.RemovePage(Self);
      end;
      inherited Destroy;
    end;
    change en quelque chose comme,(en ajoutant un evenement "freeQuery" dans votre tchepdro )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    destructor TTabSheet.Destroy;
    var b:boolean;
    begin
      if FPageControl <> nil then
      begin
    //la c'est a toi de voir le code exacte a fére mais c'est une idée c'est tout
        if assigned(freequery) then freequery(b);
        if not b then exit; 
        if FPageControl.FUndockingPage = Self then FPageControl.FUndockingPage := nil;
        FPageControl.RemovePage(Self);
      end;
      inherited Destroy;
    end;

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Oui je sais mais je voudrais que l'utilisateur du composant n'aie pas à s'occuper de quoi que ce soit... Si je fais comme tu dis, à chaque fois que l'utilisateur du composant récupère un TTabSheet, il devra caster et ça, je ne veux pas...
    bha moi je vois 2 solution : Si ton composant tabsheet particulier n'as pas de methodes/Prop public donc sa signature public ne changeant pas par rapport a un Tabsheet normal, aucun probleme.
    C'ets le cas pour traiter au moins le cas de la surcharge du destroy pour la solution proposee au depart.

    La 2e solution consisterais a developper (ce qui me semble toute fosi le plus logique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TpedroPageControl = Class(TPageCOntrol) 
    TPedroTabSheet = Class(TTabSheet)
    La premiere classe redefini la classe TPAgeControl en redefinissant toutes les fonctions/prop qui on pour parametre ou valeur de retour de fonction ou type un TTabSheet que tu vas remplacer en TPedroTabSheet.

    C'est le principe de la derivation et de la redefinition des classes.
    Averifier mais je crois que TComponentList fait comme ca, cad redefini les types de TObjctList pour eviter le cast.

    Une fois ton TPageControl redefini (sans avoir a recopier inutilement ou modifier les sources Borland) tu peut donc creer ton TPedroTabsheet et l'utilisateur n'aura plus de problemes de Cast.

    Perso je verais comme ca.

    [Edit]
    J'ai pas lu le post precedent (flemme)
    mais je crois bien qu'il parle de la meme chose que moi
    Donc +1 :p
    [/Edit]

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Mmmh c'est très interessant vos méthode effectivement
    Je vais déjà essayer ça...
    Merci en tout cas
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

Discussions similaires

  1. Inhiber un message d'alerte
    Par Rodolphe_1940 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/05/2008, 16h02
  2. Réponses: 1
    Dernier message: 16/01/2008, 12h07
  3. Message pour touche Shift inhibée
    Par Jacques-Henri dans le forum Sécurité
    Réponses: 5
    Dernier message: 11/10/2007, 21h19
  4. Inhiber les messages WM_COMMAND
    Par biz2000 dans le forum Windows
    Réponses: 2
    Dernier message: 20/09/2006, 18h33
  5. Gestion du message WM_SYSCOLORCHANGE avec WndProc
    Par yousserr dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 29/07/2005, 08h59

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