Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

ChristianG 10. Jul 2014 13:42

Informationen aus einem ClientDataSet auslesen
 
Hallo DPler,
Ich schreibe gerade ein Programm, welches XML Daten herausliest.
Delphi-Quellcode:
 for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin
       bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(i);

       cdsBezahlen.Append;
       cdsBezahlen.FieldByName('Position').asInteger := i;
       cdsBezahlen.FieldByName('ID').AsString := bnode.ChildNodes.FindNode('ID').Text;
       cdsBezahlen.FieldByName('Name').AsString := bnode.ChildNodes.FindNode('Name').Text;
       cdsBezahlen.FieldByName('Kosten').AsString := bnode.ChildNodes.FindNode('Price').Text;
       cdsBezahlen.Post;
Jetzt habe ich mehrere Buttons, womit ich die die Anzahl von einem Produkt ändern möchte. Jedoch hat jeder Name eigene Kosten, was dazu führt, dass ich den Namen,z.B 'Banane' mit einer If-Anweisung abfragen muss.
Ein Beispiel: Wenn der Name 'Banane' ist sollen die Kosten herausgelesen werden.
Ich weiß wie man dies in einer Schleife macht, aber nicht wie ich dies mit Buttons programmieren soll.

Kann mir jemand Tipps geben?

Mit freundlichen Grüßen

p80286 10. Jul 2014 16:11

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von ChristianG (Beitrag 1265059)
Jetzt habe ich mehrere Buttons, womit ich die die Anzahl von einem Produkt ändern möchte. Jedoch hat jeder Name eigene Kosten, was dazu führt, dass ich den Namen,z.B 'Banane' mit einer If-Anweisung abfragen muss.
Ein Beispiel: Wenn der Name 'Banane' ist sollen die Kosten herausgelesen werden.
Ich weiß wie man dies in einer Schleife macht, aber nicht wie ich dies mit Buttons programmieren soll.

Kofferklauen ging gerade im Verkehrslärm unter!
Könntest Du versuchen, das nochmals zu formulieren?
(Falls Deutsch nicht Deine Muttersprache ist, vllt. in Englisch?)

Gruß
K-H

ChristianG 10. Jul 2014 16:43

AW: Informationen aus einem ClientDataSet auslesen
 
Ich versuche es einmal richtig zu formulieren.
Ich schreibe mit Delphi XE6 eine APP für ein Kino, welches schon die Images und die Titel mithilfe eines Grids ausgibt. Danach wird man weitergeleitet.Dies geschieht mit einem Tabcontrol und mehreren Tabitems. In dem neuen TabItem werden alle Vorstellungen mit Datum und Uhrzeit in einem Grid ausgegeben. Wenn man auf das Grid klickt wird man in ein Login weitergeleitet, wo man sich regestrieren oder einloggen kann.Wenn man auf den Button Anmelden klickt soll mithilfe eines Clientdatasets eine ID,der Name der Kosten,die Position und die Kosten geladen werden. Die Daten bekomme ich aus dem Internet. Mein Problem besteht jetzt darin, dass wenn ich auf ein neues Tabcontrol weitergeleitet werde, mithilfe eines Buttons die Kosten ermitteln möchte, die im Client DataSet vorhanden sind. Dafür brauche ich den Namen(z.B 'standard'), mit dem ich diese Kosten für eine Standartkarte herauslesen kann.Dies soll alles Dynamisch verlaufen,bzw. wenn ich auf den Button klicke.Ich schicke einfach den Quelltext mit, den ich für die Anmeldung geschrieben habe.
Delphi-Quellcode:
procedure TAppseite1.btnAnmeldenClick(Sender: TObject);
var
login         : Boolean;
lURL,bURL     : String;
lOutput,bOutput: String;
i,u           : Integer;
lnode,bnode   : IXMLNode;
lbenutzername : String;
lpasswort     : String;
benutzername  : String;
passwort      : String;
postdata      : TStringlist;
SessionID     : String;
begin
  XMLlogin := NewXMLDocument;
  postdata := TStringList.Create;
  passwort := edPasswort.Text;
  benutzername := edBenutzername.Text;
   lURL := 'http://kinobox.net:11800/1.0/logins?apikey=2013dolphinV8';

   postdata.Add('loginname=' + benutzername);
   postdata.Add('password=' + passwort)    ;

   try
    lOutput := idHTTP1.Post(lURL,postdata);
   except
    on e:exception do begin
     showmessage('Login fehlgeschlagen' );
     exit;
    end;
   end;

   XMLlogin.XML.Text := lOutput;
   XMLlogin.Active := true;

   IdHTTP1.ConnectTimeout := 3000;
   IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';

   lnode := XMLlogin.DocumentElement.ChildNodes.FindNode('SessionID');
   SessionID := lnode.Text;

  showmessage('Login erfolgreich');
  postdata.Free;

    XMLbezahlen  := newXMLDocument;
    bURL   := 'http://kinobox.net:11800/1.0/shows/' + InttoStr(ShowID) + '/tickets?apikey=2013dolphinV8';
    bOutput := idHTTP1.Get(bURL);

    XMLbezahlen.XML.Text := bOutput;
    XMLbezahlen.Active := true;

    IdHTTP1.ConnectTimeout := 3000;
    IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.2; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';

     for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin
       bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(u);

       cdsBezahlen.Append;
       cdsBezahlen.FieldByName('Position').asInteger := u;
       cdsBezahlen.FieldByName('ID').AsString := bnode.ChildNodes.FindNode('ID').Text;
       cdsBezahlen.FieldByName('Name').AsString := bnode.ChildNodes.FindNode('Name').Text;
       cdsBezahlen.FieldByName('Kosten').AsString := bnode.ChildNodes.FindNode('Price').Text;
       cdsBezahlen.Post;
     end;

  TabItem5.Visible := true;
  TabItem5.Enabled := true;
  TabItem2.Visible := false;
  TabItem2.Enabled := false;
  Tabcontrol1.ActiveTab := TabItem5;
  Tabcontrol1.TabIndex := TabItem5.Index;
  lblSessionID.Text := SessionID;
end;
Bis hierhin läuft alles.
Jetzt stelle ich mir auch noch die Frage, wie ich es realisieren soll,dass mein Programm automatisch die 'Namen' generieren soll. Dies brauche ich zum Beispiel, wenn die Seite ein Angebot macht. (Beispiel: Alle 8 Jährigen kommen für 6 Euro in diesen Film: Name:'spezialangebot',u:7,Kosten:8,ID:...). Es sollen 2 Buttons und ein label erstellt werden. (Button1:zurück,Label1:0,Button2:vor)Wenn ich auf Button 2 gehe, soll Label1 auf 1 gehen, der Name lokalisiert werden und der Preis herausgelesen werden. Wie bekomme ich dies hin
Ich hoffe das reicht dir an Informationen
Mit freundlichen Grüßen

ChristianG 10. Jul 2014 16:51

AW: Informationen aus einem ClientDataSet auslesen
 
Was ich noch vergessen habe ist, dass die beiden Buttons und das label automatisch generiert werden sollen. Weiß jemand wie ich dies realisiert bekomme?

ChristianG 11. Jul 2014 07:53

AW: Informationen aus einem ClientDataSet auslesen
 
Hat niemand die Antwort auf mein Problem??

Jasocul 11. Jul 2014 08:23

AW: Informationen aus einem ClientDataSet auslesen
 
Ich habe mir dein Problem jetzt mehrere male durchgelesen und verstehe das Problem nicht.
Ich schreibe mal, was ich bisher meine verstanden zu haben.

Du hast ein ClientDataSet. Das wird von dir selbst gefüllt.
Dort stehen alle Daten drin, die du benötigst.
Du willst auf einen Button klicken und dann einen bestimmten Datensatz bekommen.

Was hindert dich daran, diesen Datensatz im ClientDataSet zu finden?
Das hat nichts mit Schleifen zu tun. Man muss nur wissen, wie man mit einem ClientDataSet umgeht. Oder habe ich immer noch nichts von dem verstanden, was du eigentlich möchtest?

ChristianG 11. Jul 2014 08:32

AW: Informationen aus einem ClientDataSet auslesen
 
Delphi-Quellcode:
XMLlogin := NewXMLDocument;
  postdata := TStringList.Create;
  passwort := edPasswort.Text;
  benutzername := edBenutzername.Text;
   lURL := 'http://kinobox.net:11800/1.0/logins?apikey=2013dolphinV8';
Ich hole die Daten aus dem Internet.

Ich habe die Namen und die Preise , die im Client DataSet stehen. Jetzt möchte ich z.B durch ein Grid die Namen ausgeben.Zu jeder Zeile sollen automatisch 2 Buttons gesetzt werden. Das Grid ist so aufgebaut : Button1(Muss automatisch erstellt weren)-Name-Anzahl-Button2(Muss automatisch erstellt werden). Zuerst möchte ich die Buttons automatisch generieren.Also wenn Rowcount 20 ist sollen 40 Buttons automatisch erzeugt werden. Wie geht das?
Ich versuche mal die Aufgabe Step by Step zu lösen.
Hast du mein Problem jetzt verstanden?
Danke für deine Hilfe :wink:
Mit freundlichen Grußen:

Jasocul 11. Jul 2014 08:46

AW: Informationen aus einem ClientDataSet auslesen
 
Das ist machbar, aber relativ aufwändig.
Spätestens wenn du mehr Datensätze hast, als auf den Bildschirm passen, musst du auch noch das Scrollen im Grid berücksichtigen und die Buttons entsprechend löschen und neu erstellen oder die Positionen mit-scrollen. Wie schon geschrieben: Machbar aber wenn es nicht verpflichtend ist, würde ich es lassen. Vielleicht gibt es aber auch irgendwo eine Grid-Komponente, die diese Funktionalität von Haus aus mitbringt. Müsstest du dann mal googeln.

Eventuell kannst du auch zwei Dummy-Spalten im Grid anlegen, die du wie Buttons aussehen lässt. Beim OnClick des Grids musst du dann prüfen, ob eine diese Spalten angeklickt wurde und entsprechend reagieren. Das hätte auch den Vorteil, dass du gleich auf dem richtigen Datensatz stehst.

Oder mache es wie in den meisten Anwendungen. Erstelle einfach 2 Button unter oder neben dem Grid und verwende nur diese beiden. Nachteil: Der Anwender muss zweimal klicken. Einmal den Datensatz auswählen und dann den entsprechenden Button.

ChristianG 11. Jul 2014 08:55

AW: Informationen aus einem ClientDataSet auslesen
 
Dies soll eine App werden, was bedeutet,dass diese gut aussehen muss aber auch sehr einfach zu bedienen sein muss. Also muss ich es mit 2 Buttons machen. Die Anzahl der Namen wird auch nicht Größer als 7 werden, was heißt, dass alles auf den Bildschirm passt. Wie setzt man das mit dem automatischen generieren um? Kannst du mir das erklären?
Danke für deine schnelle Antwort.
Mit freundlichen Grüßen:

Koloss 11. Jul 2014 09:16

AW: Informationen aus einem ClientDataSet auslesen
 
Code:
Button := TButton.Create(Self);
Button.Parent := self;
Button.Left := 10;
Button.Top := 10;

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.

mkinzler 11. Jul 2014 10:15

AW: Informationen aus einem ClientDataSet auslesen
 
Das macht ja die Methode.

Sir Rufo 11. Jul 2014 10:20

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von Koloss (Beitrag 1265181)
Zitat:

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

Und auch den Sender abfragen.

Siehe meinen Vorschlag und du kannst dir so einen Blähcode komplett sparen :)

ChristianG 11. Jul 2014 10:21

AW: Informationen aus einem ClientDataSet auslesen
 
Noch eine kurze Frage:
Ich habe ein Grid mit der Funktion value.
Aber in meinem ClientDataset sind zwei mal der gleiche Name und der gleiche Preis enthalten.
Wie schaffe ich es, dass die Daten nur einmal angezeigt werden?
Delphi-Quellcode:
if col = 0 then begin

    if cdsBezahlen.Locate('Position', Row, []) then
      value := cdsBezahlen.FieldByName('Name').AsString;


  end;

  if col = 1 then begin
   value := '0';
  end;
end;
Man braucht eine For-Schleife, die von dem ersten Value bis zum angezeigten Value zählt und die beiden vergleicht.
Aber wie?
PS: Für so eine kleine Frage finde ich soll man keinen neun Threat auf machen, weil eine antwort genügt.

baumina 11. Jul 2014 10:35

AW: Informationen aus einem ClientDataSet auslesen
 
Die Frage ist eher WARUM ist ein deinem ClientDataset ein und der selbe Datensatz zweimal drin. Kommt das so aus der XML-Datei? Und wenn ja, ist das die selbe ID? Und wenn ja, dann mach einfach kein Append, wenn eine ID nochmal kommt.

Photoner 11. Jul 2014 10:45

AW: Informationen aus einem ClientDataSet auslesen
 
Delphi-Quellcode:
 for u := 0 to XMLbezahlen.DocumentElement.ChildNodes.Count - 1 do begin
       bnode := XMLbezahlen.DocumentElement.ChildNodes.Get(i);

       for p := u-1 downto 0 do begin
         if
          (bnode.ChildNodes.FindNode('Name').Text = {...Name von Element mit Index "p"}) and (bnode.ChildNodes.FindNode('Name').Price = {...Preis von Element mit Index "p"})
         then
          break;
       end;

       if p>=0 then begin
        cdsBezahlen.Append;
        cdsBezahlen.FieldByName('Position').asInteger := i;
        cdsBezahlen.FieldByName('ID').AsString := bnode.ChildNodes.FindNode('ID').Text;
        cdsBezahlen.FieldByName('Name').AsString := bnode.ChildNodes.FindNode('Name').Text;
        cdsBezahlen.FieldByName('Kosten').AsString := bnode.ChildNodes.FindNode('Price').Text;
        cdsBezahlen.Post;
       end else continue;
Gleich verhindern dass es in die Liste kommt; Wie wäre es damit?

ChristianG 11. Jul 2014 10:49

AW: Informationen aus einem ClientDataSet auslesen
 
Ja danke^^

Photoner 11. Jul 2014 10:51

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von baumina (Beitrag 1265186)
Die Frage ist eher WARUM ist ein deinem ClientDataset ein und der selbe Datensatz zweimal drin. Kommt das so aus der XML-Datei? Und wenn ja, ist das die selbe ID? Und wenn ja, dann mach einfach kein Append, wenn eine ID nochmal kommt.

Es hieß nur gleicher Name und Preis. Die ID oder ein anderes Feld kann sich unterscheiden.
Jetzt fällt mir aber was auf:
Welches Feld soll man nun nehmen? Bei meinem Vorschlag wird einfach das erste genommen. Da kann gleich der nächste Fehler daraus resultieren. Vielleicht ist das ein uralter Wert der durch einen aktuelleren ersetzt worden ist.

baumina 11. Jul 2014 10:59

AW: Informationen aus einem ClientDataSet auslesen
 
Ohne die XML-Datei zu kennen reine Spekulation :)

ChristianG 11. Jul 2014 11:08

AW: Informationen aus einem ClientDataSet auslesen
 
Der Fehler ist, dass es 2 verschiedene Sitzrheien gibt...
Der preis kann sich unterscheiden, muss es aber nicht.
Also habe ich
Delphi-Quellcode:
cdsBezahlen.FieldByName('Sitzrheie').AsString := bnode.ChildNodes.FindNode('SeatingCategory').Text;
eingefügt, um die Sitzrheien im Grid extra anzeigen zu lassen :D.
Daran habe ich nicht gedacht und zu dem Thema ID: Ja sie ist immer um 1 unterschiedlich

ChristianG 11. Jul 2014 11:37

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

Wenn ich einen neuen Frame erstellen möchte kommt diese Meldung:
Die Unit"Unit1.pas" ist mit dem von diesem Projekt verwendeten Framework FMX nicht kompatibel.
Das Hinzufügen könnte zu Compiler-Fehlern oder unerwartetem Verhalten führen.Fortsetzen?
Was nun?

mkinzler 11. Jul 2014 11:40

AW: Informationen aus einem ClientDataSet auslesen
 
Hauptformular und Frame müssen vom selben Framework sein ( VCL oder FMX)

Sir Rufo 11. Jul 2014 11:45

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von ChristianG (Beitrag 1265197)
Der Fehler ist, dass es 2 verschiedene Sitzrheien gibt...
Der preis kann sich unterscheiden, muss es aber nicht.
Also habe ich
Delphi-Quellcode:
cdsBezahlen.FieldByName('Sitzrheie').AsString := bnode.ChildNodes.FindNode('SeatingCategory').Text;
eingefügt, um die Sitzrheien im Grid extra anzeigen zu lassen :D.
Daran habe ich nicht gedacht und zu dem Thema ID: Ja sie ist immer um 1 unterschiedlich

Ja, da hast du dir wohl noch zu wenig Gedanken über das Gesamt-Konzept gemacht :)

Wenn ich mir so eine Kinokarte (in Gedanken) anschaue, dann fallen mir da ein paar Informationen auf, die direkt zur Kinokarte gehören:
  • Film
  • Vorstellung
    • Uhrzeit
    • Saal
    • Sitz
      • Kategorie
  • Preis
Aus diesen Informationen lässt sich dann auch der Preis der Kinokarte bestimmen

ChristianG 11. Jul 2014 12:00

AW: Informationen aus einem ClientDataSet auslesen
 
Soll ich dir einmal das ganze Programm schicken? Damit bin ich schon fertig :D. Wusstet ihr, dass die vorderen Sitzplätze günstiger sind? ich nicht!
Ich habe jetzt Spinbuttons gefunden, die ich lieber automatisch generieren will. Ich habe nur die einschränkung, dass man mit Firemonkey keine Frames erstellen kann. Kann ich diese Spinbuttons direkt auf ein Column generieren?
Beispiel: column1 column2 column3
standart spinb.1 Box Seat
Kinder spinb.2 Boc Seat
Geht so etwas?

p80286 11. Jul 2014 12:12

AW: Informationen aus einem ClientDataSet auslesen
 
Zitat:

Zitat von ChristianG (Beitrag 1265206)
Soll ich dir einmal das ganze Programm schicken? Damit bin ich schon fertig :D.

Nun wenn das so ist.

Zitat:

Zitat von ChristianG (Beitrag 1265206)
Geht so etwas?

Na klar, bau Dir Deine Eigene Komponente!


Gruß
K-H

mkinzler 11. Jul 2014 12:16

AW: Informationen aus einem ClientDataSet auslesen
 
Ab Delphi XE4 gibt es aber Frames in FireMonkey :gruebel:

Sir Rufo 11. Jul 2014 12:17

AW: Informationen aus einem ClientDataSet auslesen
 
Wieso soll man keine Frames mit FireMonkey benutzen können?

Ein FireMonkey-Frame geht ganz hervorragend (wenn man auch ein FMX-Frame auswählt) :roll:

ChristianG 11. Jul 2014 13:04

AW: Informationen aus einem ClientDataSet auslesen
 
Dieses Frame finde ich aber nicht. Muss man etwas extra downloaden?
EDIT: habs gefunden

mkinzler 11. Jul 2014 13:09

AW: Informationen aus einem ClientDataSet auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe zwar die Pro, sollte bei der Starter aber auch funktionieren

ChristianG 11. Jul 2014 13:42

AW: Informationen aus einem ClientDataSet auslesen
 
Ich habe jetzt einen neuen Plan:
Ich erstelle einen Frame mit den Ticketnamen, dem Preis, der Sitzrheie, einer Spinbox und evt. die TicketID. Dann erstelle ich automatisch so viele Frames, wie es Namen gibt. Wie klingt das?
Apps sollen ja elegant wirken, sonst benutzt man diese nicht, obwohl es viele Features gibt.
Oder hat jemand eine bessere Idee?

ChristianG 11. Jul 2014 13:58

AW: Informationen aus einem ClientDataSet auslesen
 
Kann man keine Labels in einem Frame anlegen. Es tut mir leid, dass ich sehr viel frage, aber ich habe noch nie mit Frames oder automatischen Generierungen gearbeitet. Und Vielen Dank an alle, die mir helfen:thumb::thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Seite 1 von 2  1 2      

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