Marco Web Center

[an error occurred while processing this directive]

Home: Code Repository: Delphi 2009 Handbook

Project: KeyValueGeneric.dproj

Project Structure

KeyValueGeneric.dpr
program KeyValueGeneric;

uses
  Forms,
  KeyValueForm in 'KeyValueForm.pas' {Form2},
  KeyValueCode in 'KeyValueCode.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
KeyValueForm.pas
unit KeyValueForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, KeyValueCode;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    kv: TKeyValue<TButton>;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  kv.Key := 'mykey';
  kv.Value := Sender as TButton;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  kv.Value := Sender as TButton; // was "self"
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  // ShowMessage ('[' + kv.Key + ',' + kv.Value.ClassName + ']');
  ShowMessage ('[' + kv.Key + ',' + kv.Value.Name + ']');
end;

procedure TForm2.Button4Click(Sender: TObject);
var
  kvo: TKeyValue<TObject>;
begin
  kvo := TKeyValue<TObject>.Create;
  try
    kvo.Key := 'object';
    kvo.Value := Sender;
    kvo.Value := self;
    ShowMessage ('[' + kvo.Key + ',' +
      kvo.Value.ClassName + ']');
  finally
    kvo.Free;
  end;
end;

procedure TForm2.Button5Click(Sender: TObject);
var
  kvi: TKeyValue<Integer>;
begin
  kvi := TKeyValue<Integer>.Create;
  try
    kvi.Key := 'object';
    kvi.Value := 100;
    kvi.Value := Left;
    ShowMessage ('[' + kvi.Key + ',' +
      IntToStr (kvi.Value) + ']');
  finally
    kvi.Free;
  end;
end;

procedure TForm2.Button6Click(Sender: TObject);
var
  kvo: TKeyValue<TComponent>;
begin
  kvo := TKeyValue<TComponent>.Create;
  try
    kvo.Key := 'object';
    kvo.Value := Sender as TComponent;
    kvo.Value := self;
    ShowMessage ('[' + kvo.Key + ',' +
      kvo.Value.Name + ']');
  finally
    kvo.Free;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  kv := TKeyValue<TButton>.Create;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  kv.Free;
end;

end.
KeyValueForm.pas.dfm
object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'KeyValue'
  ClientHeight = 225
  ClientWidth = 538
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 32
    Top = 32
    Width = 113
    Height = 25
    Caption = 'Set KeyValue'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 32
    Top = 64
    Width = 113
    Height = 25
    Caption = 'Change Value'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 32
    Top = 96
    Width = 113
    Height = 25
    Caption = 'Get KeyValue'
    TabOrder = 2
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 200
    Top = 32
    Width = 169
    Height = 25
    Caption = 'KeyValue <TObject>'
    TabOrder = 3
    OnClick = Button4Click
  end
  object Button5: TButton
    Left = 200
    Top = 96
    Width = 169
    Height = 25
    Caption = 'KeyValue <Integer>'
    TabOrder = 4
    OnClick = Button5Click
  end
  object Button6: TButton
    Left = 200
    Top = 64
    Width = 169
    Height = 25
    Caption = 'KeyValue <TComponent>'
    TabOrder = 5
    OnClick = Button6Click
  end
end
KeyValueCode.pas
unit KeyValueCode;

interface

type
  TKeyValue<T> = class
  private
    FKey: string;
    FValue: T;
    procedure SetKey(const Value: string);
    procedure SetValue(const Value: T);
  public
    property Key: string read FKey write SetKey;
    property Value: T read FValue write SetValue;
  end;

implementation

{ TKeyValue }

procedure TKeyValue<T>.SetKey(const Value: string);
begin
  FKey := Value;
end;

procedure TKeyValue<T>.SetValue(const Value: T);
begin
  FValue := Value;
end;

end.
HTML file generated by PasToWeb, a tool by Marco Cantù
Copyright 2008 Marco Cantù