AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Buttons zur Laufzeit erstellen und mit Werten aus der Datenbank füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Buttons zur Laufzeit erstellen und mit Werten aus der Datenbank füllen?

Ein Thema von Erutan · begonnen am 20. Feb 2014 · letzter Beitrag vom 24. Feb 2014
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#3

AW: Buttons zur Laufzeit erstellen und mit Werten aus der Datenbank füllen?

  Alt 21. Feb 2014, 07:31
Man kann dem Button.Tag aber auch mittels Cast ein Objekt zuweisen. Allerdings weiß ich nicht, wie das unter 64 Bit aussieht, wenn Tag da nur 32-bittig ist, kann das danebengehen.
Delphi-Quellcode:
unit DynaButtons;

interface

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

type
  (* Beispieldaten, die einem Button zugeordnet werden *)
  TDatensatz = class
  private
    FStringValue: string;
    FIntValue: integer;
  public
    property StringValue: string read FStringValue write FStringValue;
    property IntValue: integer read FIntValue write FIntValue;
  end;

  TfrmDynamicButtons = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    (* Liste für die dynamischen Buttons *)
    FButtons: TObjectList;
    (* Hilfsroutine zum Erzeugen eines neuen Buttons *)
    procedure InsertButton(const ACaption: string; X, Y: integer;
      Datensatz: TDatensatz);
    (* Eventhandler für OnClick der dynamischen Buttons *)
    procedure ShowData(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  frmDynamicButtons: TfrmDynamicButtons;

implementation

{$R *.dfm}

procedure TfrmDynamicButtons.FormCreate(Sender: TObject);
var
  Datensatz: TDatensatz;
begin
  (* Erzeugen der Liste *)
  FButtons := TObjectList.Create(false);
  (* Und mit ein paar Daten befüllen *)
  Datensatz := TDatensatz.Create;
  Datensatz.StringValue := 'Hanswurst';
  Datensatz.IntValue := 100;
  InsertButton('Erster Button', 10, 10, Datensatz);
  Datensatz := TDatensatz.Create;
  Datensatz.StringValue := 'Hallo Welt';
  Datensatz.IntValue := 12345;
  InsertButton('Zweiter Button', 10, 40, Datensatz);
  Datensatz := TDatensatz.Create;
  Datensatz.StringValue := 'Dideldum, Dideldei';
  Datensatz.IntValue := 42;
  InsertButton('Dritter Button', 10, 70, Datensatz);
end;

procedure TfrmDynamicButtons.FormDestroy(Sender: TObject);
var
  i: integer;
  Datensatz: TDatensatz;
  Button: TButton;
begin
  (* Liste durchgehen und zugeordnete Daten freigeben *)
  for i := 0 to FButtons.Count - 1 do
    begin
      Button := FButtons[i] as TButton;
      Datensatz := TDatensatz(Button.Tag);
      Datensatz.Free;
    end;
  (* Die Liste selbst nicht vergessen *)
  FButtons.Free;
end;

procedure TfrmDynamicButtons.InsertButton(const ACaption: string; X, Y: integer;
  Datensatz: TDatensatz);
var
  Button: TButton;
begin
  (* Erzeugen eines neuen Buttons *)
  Button := TButton.Create(self);
  Button.Left := X;
  Button.Top := Y;
  Button.Parent := self;
  Button.OnClick := ShowData;
  Button.Caption := ACaption;
  (* und Zuordnen des Datensatzes *)
  Button.Tag := integer(Datensatz);
  (* Ab in die Liste damit *)
  FButtons.Add(Button);
end;

procedure TfrmDynamicButtons.ShowData(Sender: TObject);
var
  Datensatz: TDatensatz;
  Button: TButton;
begin
  (* Anzeigen der zugeordneten Werte *)
  if (Sender is TButton) then
    begin
      Button := TButton(Sender);
      if (FButtons.IndexOf(Button) > -1) then
        begin
          Datensatz := TDatensatz(Button.Tag);
          if Assigned(Datensatz) then
            ShowMessage(Format('Stringwert: %s; Zahlwert: %d',
              [Datensatz.StringValue, Datensatz.IntValue]));
        end;
    end;
end;

end.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz