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

Lazarus Pascal Discussion :

AutoSize bitBtn, comment ça marche [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut AutoSize bitBtn, comment ça marche
    Bonsoir

    Petite question :
    AutoSize bitBtn, comment ça marche ?

    Si je prends un bitbtn, j'y joins un glyph (tbitmap)

    Par exemple : dimension tbitmap= 71 * 34 px
    le bitbtn avec le réglage autosize= 101 * 44 px
    et si je fais un test avec objet image, si autosizing= 71 * 34 px sans bordure,
    est-ce que les bordures ajoutées par autosizing sont paramétrables ? (pour éviter le réglage manuel à chaque bitbtn et bitmap)

    Merci


    ps : edit

    Toujours à propos des bitbtns ...

    Comment gérer la position image et caption parce que par défaut c'est image à gauche et caption à droite.

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour

    Pour la position image-caption : propriété Layout
    Pour les bordures : propriété BorderSpacing : tu peux mettre en négatif InnerBorder.

    Cordialement
    Thierry

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    merci de l'info

    mais en testant, le parametre innerborder agit de manière équivalente sur hauteur et largeur du bitbtn
    comme les ajouts de bordures ne sont pas équivalentes en haut. et larg.,
    et bien si je règle par ex: innerborder à - 5 (*2 pour recuperer les 10 px ajoutés en autosize), il me reste un ajout par autosize en largeur.

    Dommage mais bien vu qd m^m


    edit:
    je vais faire essai avec tbitmap carré pour voir si cela change quelque chose, idem pour un tbitmap vertical

    edit2:

    je viens de tester :
    • sur bitbtn + tbitmap carré: 34*34 px
    • autosize donne bitbtn: 64*44 px
    • avec ajustage innerborder -5: 54*34 px

    Nom : hvQwZwO.png
Affichages : 127
Taille : 4,1 Ko


    • sur bitbtn + tbitmap vertical : 34*81 px
    • autosize donne bitbtn: 64*91 px
    • avec ajustage innerborder -5: 54*81 px

    Nom : nIgznR6.png
Affichages : 128
Taille : 8,1 Ko

    Donc autosize impose arbitrairement bouton rectangle couché

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Je crois que c'est peine perdue...
    Avec AutoSize true, le composant est pensé pour garder sa bordure (coins arrondis...).
    Si tu souhaites "serrer au plus près" la taille de ton bitmap, il faut régler manuellement. Voici pour un bouton sans Caption :
    AutoSize:= false;
    Spacing:= 0; // pour que le bitmap soit centré dans le bouton

    Et tu définis la largeur et la hauteur du bouton, soit dans l'EDI, soit par code en fonction de la taille du bitmap.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       with BitBtn1 do
       begin
         Width:= Glyph.Width + 10;
         Height:= Glyph.Height + 4;
       end;
    end;
    Simple question : si tu veux un bouton de la taille exacte de ton bitmap, pourquoi ne pas se servir, par exemple d'un TImage avec événement OnClick ? Bien sûr, dans ce cas, pas de focus et pas de KeyDown.

    Cordialement
    Thierry

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    je vais regarder ce que tu proposes

    pour répondre à ta question:

    comme je fais apparaitre (visible : hide or show) les boutons selon présence de répertoire et que l'action de pousser sur un bouton peut ruiner plusieurs heures ou jours de jeu. je préfère laisser le focus et passage sur bouton visible pour aider intuitivement l'utilisateur,
    de plus je n'ai pas envie d'alourdir l'utilisation avec x messages d'avertissement en plus de ceux existants.


    petite précision concernant les bitbtns et leur tbitmaps :

    Par exemple un bitbtn avec un tbitmap de 71*34 px

    et bien, si on fait le réglage du bitmap sur les dimensions du tbitmap = 71*34 px
    il y a un espace vertical (1 px ? )visible à droite
    Nom : MeCmWtw.png
Affichages : 128
Taille : 7,4 Ko

    donc j'ai constaté que c'était mieux de régler la largeur du bitbtn -1 px = 70 *34 px
    Nom : cV9sHuw.png
Affichages : 128
Taille : 7,2 Ko


    EDIT:
    en fait par défaut, le bitmap n'est pas centré dans le bitbtn, le bitmap est "justifié" à gauche légèrement
    donc pas simple à ajuster sans:
    • soit couper le bitmap
    • soit laisser un bord sans bitmap visible


    il faut donc prévoir des bords de qlq px "rognables" (sans importance aux bitmaps utilisés)
    et voire de prévoir des bords "rognables" de différentes épaisseurs selon bord gauche, droite, dessus, dessous .

    (évidemment sans utiliser de code pour adapter les bitbtn et son bitmap)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Bon, pour conclure (pour ma part) ce topic

    après plusieurs essais "bitbtn + tbitmap" en "autosize" pas concluant, résultats pas propres, ni réellement maitrisés (par moi)

    donc me suis rangé sur un timage avec un evenement "onclick" et un changement de cursor "onmouseenter"
    c'est ce qui m'a paru le plus simple pour signifier aux utilisateurs la possibilité de cliquer sur image
    y avait il une autre solution sans devoir charger une autre image pour illustrer un autre état du timage ?

    je n'ai pas vraiment réussi a utilisé ton code avec "tform create"(dans mon application)


    merci du temps que tu as consacré à me répondre


    pascal 3 vs gilgameshh 0.6


    ps:

    il n'y a que ces curseurs par defaut:

    Nom : dwqM1Xp.png
Affichages : 135
Taille : 34,6 Ko

    et si je veux un autre curseur comment je l'ajoute (et ou je le trouve et sous quelle forme)

  7. #7
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonsoir.

    y avait il une autre solution sans devoir charger une autre image pour illustrer un autre état du timage ?
    Oui, en utilisant, par exemple, un TImageList.
    Tu n'assignes pas d'image (propriété Picture du TImage).

    TImageList contient 2 images :
    index 0 : image au "repos"
    index 1 : image survolée par la souris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Imagelist1.GetBitmap(0, Image1.Picture.Bitmap);
    end;
     
    procedure TForm1.Image1MouseEnter(Sender: TObject);
    begin
       Imagelist1.GetBitmap(1, Image1.Picture.Bitmap);
    end;
     
    procedure TForm1.Image1MouseLeave(Sender: TObject);
    begin
       Imagelist1.GetBitmap(0, Image1.Picture.Bitmap);
    end;
    Il y a d'autres solutions, notamment l'utilisation d'un fichier ressources qui stocke les images.

    Cordialement
    Thierry

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    grand merci

    je progresse je progresse ^_^

    edit:

    j'ai fait test et c'est presque ok
    j'ai un souci pour l'affichage état initial
    l'image index 0 par defaut ne s'affiche pas, il faut que je passe sur l'image pour avoir le mouseenter qui passe image en image index 1
    puis sur le mouseleave j'ai effectivement l'image index 0

    voici extrait de mon code

    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
    procedure Image2Click(Sender: TObject);
    procedure Image2MouseEnter(Sender: TObject);
    procedure Image2MouseLeave(Sender: TObject);
     
     
    private
    { private declarations }
    public
    { public declarations }
    end;
     
    var
      Form1: TForm1;
      AProcess: TProcess;
      Str: TStringList;
      MyPoint : TPoint;
      listePaths : TStringList;
      timeDate : TDateTime;
      fa : Longint;
      i :Integer;
      ThisMoment : TDateTime;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Imagelist1.GetBitmap(0, Image2.Picture.Bitmap);
    end;
     
    procedure TForm1.Image2MouseEnter(Sender: TObject);
    begin
       Imagelist1.GetBitmap(1, Image2.Picture.Bitmap);
       Image2.Cursor := (crHandPoint);
    end;
     
     
    procedure TForm1.Image2MouseLeave(Sender: TObject);
    begin
       Imagelist1.GetBitmap(0, Image2.Picture.Bitmap);
    end;

  9. #9
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonsoir.

    J'interviens un peu tard, mais je n'avais pas vu ton edit.

    Je viens de faire le test sous Windows7, l'index 0 est bien affiché au démarrage. (?)
    Sinon, tu peux utiliser l'événement OnShow de la fiche au lieu de OnCreate.

    Cordialement
    Thierry

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Photographe
    Inscrit en
    Septembre 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Photographe
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    bonjour , de retour de rando dans les pyrenées je n'ai plus travaillé sur mon petit programme donc pas de souci.
    à priori comme l'affichage index 0 doit se faire sur un tabsheet en position 2, le onshow sans tester me parait peut être plus adapté.
    je vais tester cela et ferai un retour de mes résultats.

    merci

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

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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