AGB  ·  Datenschutz  ·  Impressum  







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

[FMX] Ansatz gesucht: Panels duplizieren?

Ein Thema von warschonweg · begonnen am 8. Apr 2018 · letzter Beitrag vom 9. Apr 2018
Antwort Antwort
Seite 2 von 2     12   
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: [FMX] Ansatz gesucht: Panels duplizieren?

  Alt 9. Apr 2018, 06:40
Ein Frame ist nicht mehr als eine vom Entwickler selbst zusammengestellte Kombination aus Controls und zugehörigem Code.
Automatisch wird da gar nichts dupliziert. Wenn Du zwei Instanzen benötigst, erzeugst Du zwei und gibst den Frames zwei verschiedene Namen.
Das Prinzip ist nicht anders, als zwei TButtons zu erzeugen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: [FMX] Ansatz gesucht: Panels duplizieren?

  Alt 9. Apr 2018, 08:11
Wichtig ist es meiner Meinung nach noch, parallel zur Oberfläche in deiner Klasse eine Liste zu pflegen.
Diese Liste enthält dann pro Eintrag z.B. mindestens eine Referenz (einen Zeiger) auf das entsprechende Frame.

So kannst du dann z.B. bei einem Klick auf Process einfach die Liste durchgehen und alles abarbeiten.
Die Zuweisung zur Liste kannst du direkt nach dem Erzeugen vornehmen.

Grüße
Headbucket
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#13

AW: [FMX] Ansatz gesucht: Panels duplizieren?

  Alt 9. Apr 2018, 09:23
@Kodezwerg

Nehmen wir an, wir erstellen ein Frame frmEingabe, dieses enthält die Buttons btnOk und btnCancel, sowie die Edits edName und edVorname.

Fügen wir nun ein derartiges Frame auf einem Formular ein und geben ihm den Namen frmPerson1, so können wir im Formularquelltext z. B. so auf die Komponenten auf dem Frame zugreifen:
Delphi-Quellcode:
...
  ShowMessage(frmPerson1.edName.Text);
  if frmPerson1.edVorname.Text = 'Paulthen begin
     ...
  end;
...
Benötigen wir nun noch ein Frame und nennen es frmPerson2, dann erfolgt der Zugriff analog dazu:
Delphi-Quellcode:
...
  ShowMessage(frmPerson2.edName.Text);
  if frmPerson2.edVorname.Text = 'Paulthen begin
     ...
  end;
...
Eigentlich ist es nicht anders, als bei den Eigenschaften irgendeiner anderen Komponente, deren Eigenschaften über weitere Eigenschaften verfügen.

IrgendeineKlasse.Eigenschaft.EigenschaftDerEigenschaft
Framename.KomponenteAufDemFrame.EigenschaftderKomponente
frmWieErAuchHeissenMag.KomponenteDadrauf.EigenschaftDerKomponente

Ein Buttonereignis könnte man so im Frame implementieren, dabei gehe ich davon aus, dass sich auf dem Frame zusätzlich noch 'ne Komponenten vom Typ TDataSource befindet:
Delphi-Quellcode:
procedure TfrmPerson.btnOKClick(Sender: TObject);
begin
  Screen.Cursor := crSQLWait;
  // Inhalt der Texteigenschaften von edName und edVorname in eine Datenbank suchen.
  if fDataSource.DataSet.Filtered then begin
    fDataSource.DataSet.Filtered := False;
  end else
  if (edName.Text <> '') and (edVorname.Text <> '') then begin
    Try
      fDataSource.DataSet.Filtered := False;
      fDataSource.DataSet.Filter := Format('Name = ''%s'' and Vorname = ''%s''',[edName.Text, edVorname.Text]);
      fDataSource.DataSet.Filtered := True;
    except
      on e : Exception do begin
        fDataSource.DataSet.Filtered := False;
        MessageDlg('Fehler beim Setzen des Filters.' + #13 + #13 + e.Message,mtError, [mbOk], 0);
      end;
    end;
  end;
  Screen.Cursor := crDefault;
end;
(Über den tieferen Sinn der Beispiele wollen wir jetzt nicht diskutieren, es geht nur ums Prinzip einer möglichen Framenutzung.)

Hat man nun alle Frames auf einem Formular in einer Liste, so muss man im Quelltext nichtmalmehr den Namen der einzelnen Frames wissen.
Delphi-Quellcode:
for i := 0 to IrgendeineListe.Count - 1 do begin
  if IrgendeineListe[i] is tfrmPerson then begin
    MemoNamensliste.Lines.Add(tfrmPerson(IrgendeineListe[i]).edName.Text + ', ' + tfrmPerson(IrgendeineListe[i]).edVorName.Text);
  end;
end;
oder:
Delphi-Quellcode:
var
   myFrame : TfrmPerson;
   i : Integer;
begin
  for i := 0 to IrgendeineListe.Count - 1 do begin
    if IrgendeineListe[i] is tfrmPerson then begin
      myFrame := IrgendeineListe[i];
      VerschickeEmail(Format('%s.%s@woauchimmer.de',[myFrame.edVorname.Text, myFrame.edName.Text));
    end;
  end;
end;
Ob man jetzt die Frames bereits zur Entwicklungszeit auf 'nem Formular platziert oder sie zur Laufzeit dynamisch erzeugt, ändert nichts an der Funktionalität.

Frames sind eigentlich, gut implementiert, genauso zu nutzen, wie eine Klasse mit diversen Eigenschaften, Methoden, Ereignissen ... (genaugenommen sind sie es ja auch type TfrmPerson = class(TFrame) ... ).
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: [FMX] Ansatz gesucht: Panels duplizieren?

  Alt 9. Apr 2018, 11:05
Hab das Prinzip Verstanden, Danke das Du so weit ausgeholt hast und Danke auch den anderen Meinungen dazu.
Nachdem ich das gelesen habe stelle ich fest, das ich mit meiner Panel-Class eigentlich genauso vorgehe.
In einer Liste speichere ich jede Panel-Instanz um den Controls darauf irgendwas machen zu lassen und um die Panels auch wieder los zu werden.
Für mich selbst ist es damit leider nicht mehr so interessant da ich für mich doch keine Großen Vorteile darin sehe, aber wenn man bei Null anfängt wäre das sicherlich auch eine gute Variante, vielleicht sogar eine einfachere.
Ich habe wahrscheinlich den Post auch ein wenig falsch interpretiert als gesagt wurde das Frames eine "duplizier" methode mitbringen.
Naiv wie ich numal bin stellte ich es mir so vor (was dann Vorteilhaft für mich gewesen wäre):
1. Ich erstelle eine sichtbare Scrollbox
2. Ich erstelle ein nicht sichtbares Frame als Ausgangsmaterial für weitere
3. Ich füge ein [+] Knopf mit einem Frame duplizier Aufruf ein der das unsichtbare Frame nun in ein sichtbares macht
4. Ich brauche keine Kontroll-Liste zur Verwaltung, da Frames das alles mit sich bringt
5. Ich brauch mir keine Gedanken machen wie die Controls auf dem Frame benannt werden
6. Wenn ich ein's loswerden will ([-] Knopf auf jedem Frame) kann ich mit Frame Funktionen dies erreichen
Also das mir der komplette Verwaltungsaufwand abgenommen wird, das dachte ich mir im Hinterstübchen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:41 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