Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Informationen aus einem ClientDataSet auslesen (https://www.delphipraxis.net/181047-informationen-aus-einem-clientdataset-auslesen.html)

Jasocul 11. Jul 2014 09:18

AW: Informationen aus einem ClientDataSet auslesen
 
Koloss hat ja schon die Basis für die Erstellung geschrieben. Die Positionen und Größen musst du natürlich noch berechnen.

Dazu musst du noch dem OnClick eine Methode zuweisen, die deine Aktionen ausführt. Das kann ich aber nicht aus dem Kopf. Aber es wird sich sicher jemand im Forum bereit finden, das kurz zu erläutern. Ist auch kein Hexenwerk. Ich habe das nur schon länger nicht mehr gemacht.

Photoner 11. Jul 2014 09:29

AW: Informationen aus einem ClientDataSet auslesen
 
Easy:

Delphi-Quellcode:
Button := TButton.Create(Self);
Button.Parent := self;
Button.Left := 10;
Button.Top := 10;
Button.OnClick := MyOnClick;
//Edit: Gib die ID oder den Name des Tickets
Button.Name := 'Button'+cdsBezahlen.FieldByName('Name').AsString;
Delphi-Quellcode:
procedure TMyForm.MyOnClick(Sender: TObject)
var
 MyString : String;
begin
 //MyProc
 //Edit:
 //Hier kannst du mit Hilfe des Namens des Buttons die gewünschten Inhalte identifizieren
 MyString := TButton(Sender).Name;
 //MyString = 'Button....'
end

Koloss 11. Jul 2014 09:38

AW: Informationen aus einem ClientDataSet auslesen
 
Delphi-Quellcode:
Button := TButton.Create(Self);
Button.Parent := self;
Button.Left := 10;
Button.Top := 10;
Button.OnClick := MyOnClick
Button.Name := 'Button' + IntToStr(Nummer);
Delphi-Quellcode:
procedure TMyForm.MyOnClick(Sender: TObject)
begin
 //MyProc
end

procedure TMyForm.FormDestroy(Sender: TObject)
var i : Integer;
begin
  for i := 0 to 19 do // 19 = ButtonAnzahl - 1
  begin
    Button := TButton(FindComponent('Button' + IntToStr(Nummer)));
    if Button <> nil then
      Button.Free;
  end;
end

Sir Rufo 11. Jul 2014 09:47

AW: Informationen aus einem ClientDataSet auslesen
 
@Koloss

Es ist absolut überflüssig die Buttons explizit zu löschen, denn bei der Erzeugung hast du die Kontrolle (Angabe des Owners) doch schon abgegeben und der Owner (hier die Form) kümmert sich schon um die Freigabe.

Selbst wenn der Owner nicht angegeben wird, braucht ein Control ja einen Parent, damit es angezeigt werden kann. Und wenn kein Owner gesetzt, dann kümmert sich der Parent um die Freigabe ;)

Koloss 11. Jul 2014 09:49

AW: Informationen aus einem ClientDataSet auslesen
 
Stimmt! Diese Problem hat mich jetzt im Firemonkey erschlagen. Siehe mein Problem, halb gelöst!
http://www.delphipraxis.net/181049-c...ml#post1265175

Sir Rufo 11. Jul 2014 10:01

AW: Informationen aus einem ClientDataSet auslesen
 
Zum generellen Ansatz des dynamischen Erzeugen von Controls, die mit irgendetwas interagieren sollen, bieten sich eigentlich Frames eher an. Der Code wird erheblich übersichtlicher.
Delphi-Quellcode:
TItemFrame = class( TFrame )
  Button1 : TButton;
  procedure Button1Click( Sender : TObject );
private
  FItem : TItem;
  procedure SetItem( const Value : TItem );
public
  property Item : TItem read FItem write SetItem;
end;

procedure TItemFrame.SetItem( const Value : TItem );
begin
  FItem := Value;
  Button1.Enabled := Assigned( FItem );
end;

procedure TItemFrame.Button1Click( Sender : TObject );
begin
  // Was auch immer nun mit dem Item machen
  DoSomethingWith( FItem );
  // oder wenn das Item etwas schlauer ist
  FItem.DoSomething;
end;
Und für die Erzeugung und Verwaltung
Delphi-Quellcode:
LItemFrames.Clear;
for LItem in FItems do
begin
  LItemFrame := TItemFrame.Create( nil );
  try
    LItemFrame.Item := LItem;

    LItemFrame.Parent := ItemsScrollBox; // halt den Container für die Items
    // Positionieren
    LItemFrame.Top := ...
    LItemFrame.Left := ...

    // In einer Liste merken
    FItemFrames.Add( LItemFrame );
    LItemFrame := nil;
  finally
    LItemFrame.Free;
  end;
end;
Das ist prinzipiell der gesamte Code um die Items darzustellen und auch mit Aktionen zu verknüpfen.

Werden die Aktionen umfangreicher, dann wird das Frame umfangreicher (mehr Buttons, mehr Controls, mehr Farbe, mehr BlingBling), der Code zur Verwaltung bleibt meistens exakt gleich

ChristianG 11. Jul 2014 10:07

AW: Informationen aus einem ClientDataSet auslesen
 
Vielen Dank euch allen!
Ich probiere es jetzt direkt aus und hoffe, dass alles klappt.
Können auch bestimmte Anweisungen für den generierten Button erstellt werden.
z.b. wie in meinem Fall dass die rechten Buttons ein Grid hochzählen lassen und die Kosten, die der angegebene Name hat, ermitteln und auslesen?

mkinzler 11. Jul 2014 10:09

AW: Informationen aus einem ClientDataSet auslesen
 
Du kannst der entsprechenden Event-Property eine entsprechende Methode zuweisen.

ChristianG 11. Jul 2014 10:10

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1265177)
Zum generellen Ansatz des dynamischen Erzeugen von Controls, die mit irgendetwas interagieren sollen, bieten sich eigentlich Frames eher an. Der Code wird erheblich übersichtlicher.
Delphi-Quellcode:
TItemFrame = class( TFrame )
  Button1 : TButton;
  procedure Button1Click( Sender : TObject );
private
  FItem : TItem;
  procedure SetItem( const Value : TItem );
public
  property Item : TItem read FItem write SetItem;
end;

procedure TItemFrame.SetItem( const Value : TItem );
begin
  FItem := Value;
  Button1.Enabled := Assigned( FItem );
end;

procedure TItemFrame.Button1Click( Sender : TObject );
begin
  // Was auch immer nun mit dem Item machen
  DoSomethingWith( FItem );
  // oder wenn das Item etwas schlauer ist
  FItem.DoSomething;
end;
Und für die Erzeugung und Verwaltung
Delphi-Quellcode:
LItemFrames.Clear;
for LItem in FItems do
begin
  LItemFrame := TItemFrame.Create( nil );
  try
    LItemFrame.Item := LItem;

    LItemFrame.Parent := ItemsScrollBox; // halt den Container für die Items
    // Positionieren
    LItemFrame.Top := ...
    LItemFrame.Left := ...

    // In einer Liste merken
    FItemFrames.Add( LItemFrame );
    LItemFrame := nil;
  finally
    LItemFrame.Free;
  end;
end;
Das ist prinzipiell der gesamte Code um die Items darzustellen und auch mit Aktionen zu verknüpfen.

Werden die Aktionen umfangreicher, dann wird das Frame umfangreicher (mehr Buttons, mehr Controls, mehr Farbe, mehr BlingBling), der Code zur Verwaltung bleibt meistens exakt gleich

Damit hat sich meine Frage von selbst beantwortet.
Ich glaube, dass ich jetzt mein Programm ohne Probleme weiterschreiben kann^^.

Koloss 11. Jul 2014 10:13

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von mkinzler (Beitrag 1265179)
Du kannst der entsprechenden Event-Property eine entsprechende Methode zuweisen.

Und auch den Sender abfragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr.
Seite 2 von 6     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz