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

API, COM et SDKs Delphi Discussion :

Transparence d'un TPageControl


Sujet :

API, COM et SDKs Delphi

  1. #1
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut Transparence d'un TPageControl
    Bonjour,

    qui peut m'expliquer la différence de rendu entre un TPageControl (WC_TABCONTROL) sur une fiche et dans une fenêtre crée à la main ?

    la zone à droite des onglets est grisée dans le second cas. Vu qu'ils sont créés de la même façon dans la même application, j'imagine que c'est lié à TForm.

    Sous Delphi XE2
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    uses
      Vcl.ComCtrls, CommCtrl;
     
    procedure TForm3.FormCreate(Sender: TObject);
    var
      WC:TWndClass;
      W : THandle;
      PC: THandle;
      Tab: TTCITem;
    begin
    // fenêtre non-vcl
      FillChar(WC, SizeOf(WC),0);
      WC.lpfnWndProc := @DefWindowProc;
      WC.hInstance := hInstance;
      WC.lpszClassName := 'TEST';
      WC.hbrBackground := CreateSolidBrush($0000ff);
      WinAPI.Windows.RegisterClass(WC);
     
      W := CreateWindowEx(
       0,
       'TEST',
       'hello',
       WS_OVERLAPPEDWINDOW or WS_VISIBLE,
       10,10,400,250,
       0,0,hinstance,nil);
     
    // Init des PageControl
      InitCommonControl(ICC_TAB_CLASSES);
     
    // PageControl sur cette fenêtre
      PC := CreateWindowEx(
          0,
          WC_TABCONTROL,
          nil,
          WS_CHILD or WS_CLIPCHILDREN	or WS_TABSTOP or WS_VISIBLE or TCS_TABS,
          10, 10, 200, 100,
          w,
          0, hInstance,
          nil
      );
      FillChar(Tab, SizeOf(Tab), 0);
      Tab.mask := TCIF_TEXT;
      Tab.pszText := 'Hello';
      SendMessage(PC, TCM_INSERTITEM, 0, NativeUInt(@Tab));
      SendMessage(PC, TCM_INSERTITEM, 1, NativeUInt(@Tab));
      SendMessage(PC, WM_SETFONT, Font.Handle, 0);
     
    // PageControl sur la Fiche
      PC := CreateWindowEx(
          0,
          WC_TABCONTROL,
          nil,
          WS_CHILD or WS_CLIPCHILDREN	or WS_TABSTOP or WS_VISIBLE or TCS_TABS,
          10, 10, 200, 100,
          Handle,
          0, hInstance,
          nil
      );
      FillChar(Tab, SizeOf(Tab), 0);
      Tab.mask := TCIF_TEXT;
      Tab.pszText := 'Hello';
      SendMessage(PC, TCM_INSERTITEM, 0, NativeUInt(@Tab));
      SendMessage(PC, TCM_INSERTITEM, 1, NativeUInt(@Tab));
      SendMessage(PC, WM_SETFONT, Font.Handle, 0);
    end;
    Nom : hello.jpg
Affichages : 89
Taille : 12,2 Ko

    Merci
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    Si poser sur une fiche, tu as les property published default, j'ai vu certains composants qui ne s'appuyait que la dessus pour initialiser leur valeur, le constructeur lui ne le faisant pas !

    De plus ton code API fait-il la même chose que le CreateParams du TPageControl ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si poser sur une fiche, tu as les property published default, j'ai vu certains composants qui ne s'appuyait que la dessus pour initialiser leur valeur, le constructeur lui ne le faisant pas !

    De plus ton code API fait-il la même chose que le CreateParams du TPageControl ?
    je ne sais pas, mais peu importe puisque je crée les deux via CreateWindowEx avec les mêmes paramètres

    la seule chose qui change c'est le HWnd du parent...une fenêtre créée par CreateWindowEx d'un côté et TForm.Handle de l'autre...j'ai exploré les message WM_CTLCOLORxxx mais ça n'a rien donné.

    A, et le code sous Delphi 6 avec un {$R WinXP.RES} me donne le même effet indésirable, je pense que c'est donc lié à TFormStyleHook...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 083
    Par défaut
    Ah !
    Je n'avais pas compris !
    Comme tu parlais de TPageControl
    Je pensais que tu utilisais systèmatiquement une TForm, l'une avec un TPageControl et l'autre avec WC_TABCONTROL

    Mais ce n'est pas ça
    Tu utilises tout le temps WC_TABCONTROL
    Cela doit donc être les paramètres de création de la TForm ou même la WndProc par défaut de Delphi

    TFormStyleHook n'existait pas en D6 !
    Je pense plutôt à un SetLongWindow ou une valeur dans CreateParams que passe la TForm et pas ton code manuel
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Ah !
    Je n'avais pas compris !
    Comme tu parlais de TPageControl
    Je pensais que tu utilisais systèmatiquement une TForm, l'une avec un TPageControl et l'autre avec WC_TABCONTROL

    Mais ce n'est pas ça
    Tu utilises tout le temps WC_TABCONTROL
    Cela doit donc être les paramètres de création de la TForm ou même la WndProc par défaut de Delphi

    TFormStyleHook n'existait pas en D6 !
    Je pense plutôt à un SetLongWindow ou une valeur dans CreateParams que passe la TForm et pas ton code manuel
    mais justement, sous D6 le WC_TABCONTROL s'affiche avec un fond gris...donc je pense que c'est lié à la gestion des thèmes de TFormStyleHook mais c'est un peu confus ce truc et rien de ce que je trouve sur le net ne répond à cette question toute bête...on trouve des gens qui ont ce même problème...et toujours des solution hallucinantes que je ne retrouve pas dans la VCL
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. comment faire un background transparent?
    Par guigui1005 dans le forum Composants
    Réponses: 5
    Dernier message: 17/05/2012, 21h45
  2. Rendre TPageControl transparent
    Par PaCHeKo! dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/03/2007, 14h59
  3. Comment rendre transparent le tour d un icone
    Par NeoRonin dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/03/2003, 01h40
  4. Réponses: 1
    Dernier message: 23/02/2003, 06h22
  5. ouverture d'une form en fondu transparent
    Par nicholz dans le forum Composants VCL
    Réponses: 9
    Dernier message: 08/01/2003, 11h06

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