Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Lazarus
Lazarus Forum d'entraide sur Lazarus, l'EDI RAD multiplateforme basé sur Free Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/11/2012, 18h27   #1
ApproxDev
Nouveau Membre du Club
 
Homme Benjamin
Codeur
Inscription : août 2012
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Codeur

Informations forums :
Inscription : août 2012
Messages : 37
Points : 36
Points : 36
Par défaut TCustomControl et Caption

Bonjour,

Le code :
Code :
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
unit myBitBtn;
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, {Tlabel}
  math {max}
  ;
 
type
  TmyBitBtn = class(TCustomControl)
  private
    { Private declarations }
    FCaption  : String;      
 protected
    { Protected declarations }
      procedure SetCaption(const Value: String);
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 
  published
    { Published declarations }
    property Caption  : String read FCaption write SetCaption;
  end;
 
implementation 
 
constructor TmyBitBtn.Create(AOwner: TComponent);
begin
    Inherited Create(AOwner);
    FCaption := Name;
    Showmessage(Name)
end;          
 
procedure TmyBitBtn.SetCaption(const Value : String);
begin
 if value <> FCaption then begin
   FCaption := Value;
 end;
end;
L'objectif : Que le FCaption soit initialisé avec le nom du composant (Self.Name donc par exemple myBitBtn1) lorsque que l'on pose le composant sélectionné sur la Form.

Le problème : Ligne 38. Showmessage(name)-> ''. A ce stade le nom du composant quand on le place sur la Form n'est pas affecté. Il faut attendre le retour de la "TForm".

Comment faire ? Merci.
ApproxDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 00h13   #2
ApproxDev
Nouveau Membre du Club
 
Homme Benjamin
Codeur
Inscription : août 2012
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Codeur

Informations forums :
Inscription : août 2012
Messages : 37
Points : 36
Points : 36
Hum... Je n'avais pas vu que l'on disposait par défaut d'une property Caption.

En combinant
Code :
1
2
 procedure mySetCaption(const Value: String);
 function  myGetCaption  : String;
pour
Code :
 property Caption : string read myGetCaption write mySetCaption;
et
Code :
 procedure CreateWnd;  override; pour le premier "affichage"
cela fonctionne.
A+
ApproxDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 05h14   #3
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 392
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 392
Points : 10 728
Points : 10 728
j'imagine que, comme sous Delphi, il suffit d'ajouter csSetCaption à ControlStyle dans le constructor.
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/11/2012, 09h53   #4
ApproxDev
Nouveau Membre du Club
 
Homme Benjamin
Codeur
Inscription : août 2012
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Codeur

Informations forums :
Inscription : août 2012
Messages : 37
Points : 36
Points : 36
Bonjour,

Je dois être un peu "neuneu" mais je n'y arrive pas avec cette méthode : je dois mal l'utiliser.
Code :
1
2
3
4
5
6
7
8
9
10
type
  TmyBitBtn = class(TCustomControl)  
  [...]
 
constructor TmyBitBtn.Create(AOwner: TComponent);
begin
    Inherited Create(AOwner);
    ControlStyle:= ControlStyle + [csSetCaption];
    Showmessage(Caption);
end;
Le Showmessage renvoie -> '' lorsque je dépose un TmyBitBtn sur la Form.

Et puis autre question : lors de l'affectation du name par défaut dans le Self.Caption, comment faire apparaître ce nom dans le Label inclus dans composant que l'on vient de déposer sur la Form?

Merci. A+
ApproxDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 11h30   #5
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 392
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 392
Points : 10 728
Points : 10 728
en réalité (sous Delphi tout au moins) il n'y a rien à faire, sauf à publier la propriété Caption héritée, csSetCaption est déjà défini.

Code :
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
 
unit myBitBtn;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Controls;
 
type
  TmyBitBtn = class(TCustomControl)
  private
    { Déclarations privées }
  protected
    { Déclarations protégées }
  public
    { Déclarations publiques }
  published
    { Déclarations publiées }
    property Caption;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Exemples', [TmyBitBtn]);
end;
 
end.
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web