AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array Button auslesen

Ein Thema von akio87 · begonnen am 28. Mai 2015 · letzter Beitrag vom 28. Mai 2015
Antwort Antwort
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
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Array Button auslesen

  Alt 28. Mai 2015, 11:03
Ich sehe erst mal keinen Fehler im Source... Abgesehen davon, dass ich es anders machen würde - aber egal...

Wie sind die Arrays definiert?
  Mit Zitat antworten Zitat
akio87

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

AW: Array Button auslesen

  Alt 28. Mai 2015, 11:33
meine Arrays sind wie folgt definiert:

Code:
    PanelArray: array[1..999] of TUniPanel;
    ArtNameArray: array[1..999] of TUniLabel;
    ArtBZArray: array[1..999] of TUniLabel;
    ArtNrArray: array[1..999] of TUniLabel;
    ArtPreisArray: array[1..999] of TUniLabel;
    ButtonArray: array[1..999] of TUniButton;
    ImageArray: array[1..999] of TUniImage;
Wie würdest du es anders gestalten? Da die Abfragen zum SQL Server auch nicht super schnell sind, dauert alles immer ein wenig Zeitversetzt...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Array Button auslesen

  Alt 28. Mai 2015, 11:42
Ich würde dynamische Arrays verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
akio87

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

AW: Array Button auslesen

  Alt 28. Mai 2015, 12:01
ja das werd ich später noch anpassen, mit den dynamischen arrays. die schleife, die diese Array freigeben soll, haut mir das Programm um die Ohren bei der dynamische Variante... Das ganze passe ich dann später an

nun erst einmal das Problem, die Buttons anzusprechen, um den Inhalt zu definieren. Da eine Idee? Und Anpassung zum Quellcode, was oder wie man die sache besser gestalten könnte, als Online-Shop?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Array Button auslesen

  Alt 28. Mai 2015, 12:06
Die Grenzen kann man mit Low() und High() ermitteln
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Array Button auslesen

  Alt 28. Mai 2015, 12:09
+ Das Ganze in einen Record packen
  Mit Zitat antworten Zitat
akio87

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

AW: Array Button auslesen

  Alt 28. Mai 2015, 12:35
Okay, das mit den Arrays und Records muss ich mir mal genauer anschauen... Die Schleife zur Freigabe der Arrays wird ja mit Low() und High() angewendet, aber es kommt eine Fehlermeldung... Welche kann ich gerne später mal zeigen...

Ich würde gern weiter machen:
Gibt es jetzt zu meiner Version eine Lösung, damit ich den Button direkt ansprechen kann und die inhalte laden kann?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Array Button auslesen

  Alt 28. Mai 2015, 15:40
Ich kenn mich jetzt mit UniGui nicht aus, aber die Fehlermeldung schein ja irgendwie aus dem Framework zu kommen. Sollte man vllt. fmProdukt1 jedes mal neu erzeugen und anschließend freigeben?
Ralph
  Mit Zitat antworten Zitat
akio87

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

AW: Array Button auslesen

  Alt 28. Mai 2015, 15:49
hm, den Part mit fmProdukt1 habe ich ausgeklammert { } und es nur mit ShowMessage() probiert, um zu sehen was er mir ausgibt.

Wenn ich zum Beispiel den 2. Artikel (einen ButtonArray) anklicke, erscheint dieser mit dem name= 'ButtonArray2', so wie es sein soll.
Wenn ich mir nun den 3. oder ein anderen Artikel anschauen möchte, kommt diese Fehlermeldung.

ABER wenn ich wieder den 2. Artikel anklicke, erscheint wieder ShowMessage 'ButtonArray2', wie es sein soll...

nach dem Programmstart kann ich einen ButtonArray auswählen, dann funktioniert es, aber sobald ich danach einen weiteren anklicke, kommt die Fehlermeldung...

Hab ich einen Denkfehler?
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:53 Uhr.
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