Les Snippets

Connexion

Stocker autre chose qu'un Integer dans le tag d'un composant

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 22/08/2007 14:33:08 et initié par Caribensila [Liste]
Vue : 1545
Catégorie(s) : Trucs & Astuces
Langages dispo pour ce code :
- Delphi 5
- Delphi 5



Langage : Delphi 5
Date ajout : 22/08/2007
Posté par Caribensila [Liste]

type
  TWideTag = record      //Pour stocker les données.
        Data1 : String;      //Exemple d'une chaîne.
        Data2 : Extended; //Exemple d'un Extended.
  end;
  PWideTag = ^TWideTag; //Pointe sur le record.


procedure TForm1.FormCreate(Sender: TObject);
var   TagTest : PWideTag;
begin
  New(TagTest);
  TagTest.Data1 := 'Chaîne-test';
  TagTest.Data2 := 0.1234;
  UnCompo.Tag := Longint(TagTest); //Transtypage Pointer->entier
end;


procedure TForm1.FormDestroy(Sender: TObject);
var   WideTag : PWideTag;
begin
 WideTag := Pointer(UnCompo.Tag); //Transtypage entier->Pointer.
 Dispose(WideTag);   //Libère la mémoire adressée par le pointeur.
end;


{Exemple d'utilisation.}
procedure TForm1.Button1Click(Sender: TObject);
var   WideTag : PWideTag;
begin
  WideTag := Pointer(UnCompo.Tag); //Transtypage entier->Pointer.
  Edit1.Text := WideTag.Data1;          //Affiche les champs du record.
  Edit2.Text := FloatToStr(WideTag.Data2);
end;

Remarque :
Fait avec Delphi7.
Langage : Delphi 5
Date ajout : 26/08/2007
Posté par f0xi [Liste]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TEdit = class(StdCtrls.TEdit)
  private
    fDataTag : pointer;
    procedure SetDataTag(value : pointer);
  public
    destructor Destroy; override;
    property DataTag : pointer read fDataTag write SetDataTag default nil;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
{ TEdit }
destructor TEdit.Destroy;
begin
  SetDataTag(Nil);
  inherited Destroy;
end;
procedure TEdit.SetDataTag(value: pointer);
begin
  if fDataTag <> Value then
  begin
    if fDataTag <> nil then
       Dispose(fDataTag);
    fDataTag := Value;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var ptr : ^Single;
begin
  New(ptr);
  ptr^ := Pi;
  Edit1.DataTag := ptr;
  New(ptr);
  ptr^ := 180/Pi;
  Edit2.DataTag := ptr;
  Edit1.Text := Format('%.4f',[ Single(Edit1.DataTag^) ]);
  Edit2.Text := Format('%.4f',[ Single(Edit2.DataTag^) ]);
end;
end.

Remarque :
Petite variante :) verifier tout de meme le MemoryLeak.

Snippets en rapport avec : Pointeur, Tag, Pointer



Codes sources en rapport avec : Pointeur, Tag, Pointer

{Delphi} TLIST POUR STOCKER DES INTEGERS
C'est un petit code sans prétention pour les débutants. TList ne stocke que des pointeurs. Mais P...

{C / C++ / C++.NET} CORRECTEUR DE PONCTUATION
Mon petit programme corrige les fautes de ponctuation telleque un espace avent un poin, la virgule, ...

{Python} GESTIONNAIRE DE FICHIERS MUSICAUX
Quand vous extraiiez de la musique depuis un CD, il est courant que votre lecteur appel vos fichiers...

{PHP} FONCTIONS DE BASE POUR GÉNÉRER DU XML EN PHP
J'avais besoin d'extraire beaucoup de données d'une base et de générer un flux xml en retour (pratiq...

{Visual Basic, VB6, VB.NET, VB 2005} CAPTURER L'ÉCRAN SANS UTILISER LE PRESSE-PAPIER, EN GARDANT LE POINTEUR DE LA SOURIS
Après avoir souvent fait appel aux ressources de ce site pour le développement de mon logiciel Captu...

{C / C++ / C++.NET} GENERATION DE L'EXPRESSION REGULIERE (REGEXP) POUR MANGER JUSQU'A UNE CHAINE
Bon je sais pas vous mais moi ça me gonfle de devoir écrire l'expression reguliere qui signifie : "m...

{Visual Basic, VB6, VB.NET, VB 2005} INCLURE POCHETTE D'ALBUM / JAQUETTE DANS VOS TAG MP3 - EDITION TAG V2
Bonjour, Cette application, en quelques mots, permet de retaguer vos fichiers Mp3 ou un dossier d'a...

{Visual Basic, VB6, VB.NET, VB 2005} HMEDIA LECTEUR
C'est un lecteur qui utilise directX9 pour lire les sons et les video, il permet aussi de lire les T...

{Delphi} TSPEEDBUTTON TYPE VA-ET-VIENT
Le Composant TDoubleSpeed est TSpeedButton type va-et-vient.. En cliquant dessus le Caption du bout...

{Visual Basic, VB6, VB.NET, VB 2005} MEZIK II, LECTEUR MUSIQUE, LYRIC, TAG, RENOMMER, SUPPRIMER ETC.
- Permet de lire les tags et de les écrire (codes prit sur ce site) - Permet de faire jouer une cha...