Einzelnen Beitrag anzeigen

akio87

Registriert seit: 18. Mär 2010
44 Beiträge
 
Delphi XE8 Architect
 
#1

Array Button auslesen

  Alt 28. Mai 2015, 09:13
Hallo,

ich möchte eine Art Online-Shop aufbauen...

Zur Laufzeit lasse ich die "Anzeigen..." Buttons erstellen (das klappt wunderbar), welcher der Artikel in Detail erscheinen soll...

Code:
UniMainModule.SQLTable1.Active := false;
    UniMainModule.SQLTable1.TableName := 'artikelliste';
    UniMainModule.SQLTable1.Active := true;
    UniMainModule.SQLTable1.Open;

    UniPanel1.Height := 150;
    n:= 1;
    For i := 0 to UniListBox1.Items.Count-1 do
    begin
     //SQL Abfrage, String aus sl laden und SQL Tabelle suchen...
     str := UniListBox1.Items.Strings[i];
     if UniMainModule.SQLTable1.Locate('ArtNr', str, []) then
      begin
       //Panel erstellen
       PanelArray[n] := TUniPanel.Create(self);
       PanelArray[n].Parent := UniPanel1;
       PanelArray[n].SetBounds(0,100 * n -100,UniPanel1.Width,100);
       PanelArray[n].Name := 'ArrayPanel' + IntToStr(n);

       //TPanel in der höhe erweitern
       UniPanel1.Height := UniPanel1.Height + PanelArray[n].Height;

       //Button auf erstellten Panel erstellen
       ButtonArray[n] := TUniButton.Create(self);
       ButtonArray[n].Parent := PanelArray[n];
       ButtonArray[n].SetBounds(PanelArray[n].Width - 80 , PanelArray[n].Height - 30 ,75,25);
       ButtonArray[n].Caption := 'Anzeigen...';
       ButtonArray[n].Tag := n;
       ButtonArray[n].Name := 'ArrayButton' + IntToStr(n);
       ButtonArray[n].Hint := UniMainModule.SQLTable1.fieldByName('ArtNr').AsString;
       ButtonArray[n].OnClick := ButtonWarenkorbClick;

       //Image setzen
       //Button auf erstellten Panel erstellen
       ImageArray[n] := TUniImage.Create(self);
       ImageArray[n].Parent := PanelArray[n];
       ImageArray[n].SetBounds(0, 0, 100, 100);
       ImageArray[n].Center := true;
       ImageArray[n].Url := 'kasisystem.esy.es/Bilder/' + UniMainModule.SQLTable1.fieldByName('ArtNr').AsString + '.jpg';
       //ShowMessage(ImageArray[i].url);

       //Label setzen und Namen aus Datenbank definieren
       ArtNameArray[n] := TUniLabel.Create(self);
       ArtNameArray[n].Parent := PanelArray[n];
       ArtNameArray[n].SetBounds(ImageArray[n].Width + 5, 10 ,100,13);
       ArtNameArray[n].Font.Style := [fsBold, fsUnderline];
       ArtNameArray[n].Caption := UniMainModule.SQLTable1.fieldByName('Hersteller').AsString + ' ' + UniMainModule.SQLTable1.fieldByName('ArtName').AsString;

       //Label setzen und BZ aus Datenbank definieren
       ArtBZArray[n] := TUniLabel.Create(self);
       ArtBZArray[n].Parent := PanelArray[n];
       ArtBZArray[n].SetBounds(ImageArray[n].Width + 10, ArtNameArray[n].Top + 20 ,100,13);
       ArtBZArray[n].Caption := UniMainModule.SQLTable1.fieldByName('ArtBZ').AsString;

       //Label setzen und ArtNr aus Datenbank definieren
       ArtNrArray[n] := TUniLabel.Create(self);
       ArtNrArray[n].Parent := PanelArray[n];
       ArtNrArray[n].SetBounds(ImageArray[n].Width + 10, ArtBZArray[n].Top + 20, 50, 13);
       ArtNrArray[n].Caption := 'Art. Nr.: ' + UniMainModule.SQLTable1.fieldByName('ArtNr').AsString;

       //Label setzen und ArtPreis aus Datenbank definieren
       ArtPreisArray[n] := TUniLabel.Create(self);
       ArtPreisArray[n].Parent := PanelArray[n];
       ArtPreisArray[n].SetBounds(ImageArray[n].Width + 10, ArtNrArray[n].Top + 20, 50, 13);
       ArtPreisArray[n].Font.Style := [fsBold];
       ArtPreisArray[n].Font.Color := clTeal;
       ArtPreisArray[n].Font.Size := 9;
       preisStr := UniMainModule.SQLTable1.fieldByName('ArtPreis').AsString;
       ArtPreisArray[n].Caption := 'Ihr Preis: ' + preisStr + ' EUR';

       n := n+1;
      end;
Jeder Button ist mit onClick einer Prozedur zugeordnet und sieht wie folgt aus: (ShowMessage ist erst einmal nur zum Testen da, um zu sehen, wie ich die Buttons anspreche, der eigeneliche Code steht in {})

Code:
procedure Tfmstart1.ButtonWarenkorbClick(Sender: TObject);
begin
  if Sender is TUniButton then
   begin
     ShowMessage(TUniButton(Sender).Name);
     
     {
     UniMainModule.SQLTable1.Active := false;
     UniMainModule.SQLTable1.TableName := 'artikelliste';
     UniMainModule.SQLTable1.Active := true;
     UniMainModule.SQLTable1.Open;

     if UniMainModule.SQLTable1.Locate('ArtNr', TUniButton(Sender).Hint, []) then
      begin
        fmProdukt1.ShowModal();

        fmProdukt1.UniLabel1.Caption := UniMainModule.SQLTable1.fieldByName('Hersteller').AsString + ' ' +         UniMainModule.SQLTable1.fieldByName('ArtName').AsString;
        fmProdukt1.UniLabel2.Caption := UniMainModule.SQLTable1.fieldByName('ArtBZ').AsString;
        fmProdukt1.UniLabel3.Caption := UniMainModule.SQLTable1.fieldByName('ArtNr').AsString;
        fmProdukt1.UniLabel10.Caption := UniMainModule.SQLTable1.fieldByName('ArtPreis').AsString;
        //TUniButton(Sender).Caption:='Neuer Titel';
      end;}
   end;

end;

nun mein Problem:

wenn ich nach Programmstart ein ArrayButton anklicke, wird mir auch DIESER Button angezeigt mit allen Infos (Art Name und Co), aber wenn ich den nächsten button anklicke, folgt eine Fehlermeldung, siehe Anhang...

Wie kann ich die Buttons so nutzen, dass mir die Artikel angezeigt werden?

Ich arbeite mit Delphi XE8 + UniGui (da es eine Webanwendung werden soll) + MySQL Datenbank
Miniaturansicht angehängter Grafiken
unbenannt.png  

Geändert von akio87 (28. Mai 2015 um 09:39 Uhr)
  Mit Zitat antworten Zitat