Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   wert "durchreichen" ? (https://www.delphipraxis.net/159931-wert-durchreichen.html)

khh 19. Apr 2011 10:30

wert "durchreichen" ?
 
hallo zusammen,
ich habe eine Form mit einem Eingabefeld Tedit.

Auf dem Form befindet sich auch eine Scollbox mit diversen Buttons. (Artikelgruppen)
Beim Klick auf einen dieser Buttons wird (vom Artikelgruppenbutton) eine weitere Scollbox mit weiteren Buttons (Artikel) erzeugt und auf dem Form angezeigt.
Beim Klick auf einen dieser Artikel-Buttons braucht dieser Artikel-Button den Wert der in besagtem Tedit steht um diesen in eine DB-tabelle einzutragen.
Ohne Zirkelbezug muss ich den Wert durch alle übergelagerten Instanzen( also Scollbox, Button, scollbox) durchreichen um ihn in dem Button zur Verfügung zu haben, oder gibts noch ne andere Möglichkeit?

Wie gesagt, Zirkelbezug möchte ich, wenn möglich vermeiden.

danke für eure ideen
Gruss KHH

shmia 19. Apr 2011 10:36

AW: wert "durchreichen" ?
 
Zitat:

Zitat von khh (Beitrag 1095971)
... muss ich den Wert durch alle übergelagerten Instanzen( also Scollbox, Button, scollbox) durchreichen ...

Heisst das, dass du Ableitungen von TScrollbox und TButton in deinem Programm hast?

Deep-Sea 19. Apr 2011 10:36

AW: wert "durchreichen" ?
 
Du hast also nur eine einzige Form? Wieso greifst du dann nicht einfach auf das Edit zu? :gruebel:

khh 19. Apr 2011 10:38

AW: wert "durchreichen" ?
 
Zitat:

Zitat von shmia (Beitrag 1095977)
Zitat:

Zitat von khh (Beitrag 1095971)
... muss ich den Wert durch alle übergelagerten Instanzen( also Scollbox, Button, scollbox) durchreichen ...

Heisst das, dass du Ableitungen von TScrollbox und TButton in deinem Programm hast?

richtig,
und Tbutton erzeugt beim Klick eine weitere Scollbox mit weiteren Buttons.
Diese Buttons benötigen den Wert aus dem TEdit.

khh 19. Apr 2011 10:39

AW: wert "durchreichen" ?
 
Zitat:

Zitat von Deep-Sea (Beitrag 1095978)
Du hast also nur eine einzige Form? Wieso greifst du dann nicht einfach auf das Edit zu? :gruebel:

wie?

wie bekomme ich den Wert an den Button übergeben, von dem die Form ja gar nix weis :-(

shmia 19. Apr 2011 10:44

AW: wert "durchreichen" ?
 
Ich habe nach einer Ableitung gefragt; anscheinend reden wir aneinander vorbei:
Das ist eine (relativ sinnfreie) Ableitung von TButton:
Delphi-Quellcode:
type
  TMySpezialButton = class(TButton)
  ...
  public
    property ArtkelNr:string ...;
  end;
Verwendest du also abgeleitete Controls?

khh 19. Apr 2011 10:47

AW: wert "durchreichen" ?
 
Zitat:

Zitat von shmia (Beitrag 1095983)
Ich habe nach einer Ableitung gefragt; anscheinend reden wir aneinander vorbei:
Das ist eine (relativ sinnfreie) Ableitung von TButton:
Delphi-Quellcode:
type
  TMySpezialButton = class(TButton)
  ...
  public
    property ArtkelNr:string ...;
  end;
Verwendest du also abgeleitete Controls?


ja, genau so.
Dieser MySpezialbutton erzeugt eine Scollbox mit MyspezialArtikelButtons, die beim Klick eben jenen Wert aus dem TEdit benötigen.

Deep-Sea 19. Apr 2011 10:52

AW: wert "durchreichen" ?
 
Das ist mir gerade zu verwirrend ...
Ein Button erzeugt Controls, von denen er nicht der Parent ist? (Kann er ja auch nicht.)
Wer ist denn nun der Owner dieser Controls, wer der Parent?

khh 19. Apr 2011 11:00

AW: wert "durchreichen" ?
 
Zitat:

Zitat von Deep-Sea (Beitrag 1095989)
Das ist mir gerade zu verwirrend ...
Ein Button erzeugt Controls, von denen er nicht der Parent ist? (Kann er ja auch nicht.)
Wer ist denn nun der Owner dieser Controls, wer der Parent?



Parent der Scrollboxen ist jeweils das Form.
parent der Buttons die zugehörende Scrollbox.

Bbommel 19. Apr 2011 11:10

AW: wert "durchreichen" ?
 
Wenn das Edit "Edit1" hieße, das Form "Form1" bzw. "TForm1" und der neue Button "ButtonNeu" (ja, verdammt kreativ, ich weiß), dann müsstest du doch von dem neuen Button aus so dorthin kommen:

Delphi-Quellcode:
TForm1(ButtonNeu.parent.parent).Edit1.Text

Mit dem ersten Parent bist du bei der Scrollbox, von da aus mit dessen Parent beim Form1 und dort findest du ja dann deine Edit-Komponente wieder.

Bis denn
Bommel

stahli 19. Apr 2011 11:30

AW: wert "durchreichen" ?
 
Ich will auch mal noch zu Missverständnissen beitragen... :wink:

Wenn Du eigene ScrollBoxen verwendest, könntest Du eine Eigenschaft UsesEdit einrichten und der Dein Edit zuweisen:

MyScrollBox := TMyScrollBox.Create(Self);
MyScrollBox.UsesEdit := Edit1;

Innerhalb der Scrollboxereignisse kannst Du dann auf UsesEdit zugreifen.

Alternativ könnte man eine globale Variable nutzen, wenn man mit den Protesten der Profi-Gemeinde leben kann.

ConnorMcLeod 19. Apr 2011 12:19

AW: wert "durchreichen" ?
 
Sorry, wenn ich das falsch verstehe, aber meine Idee:
Pseudocode!
Delphi-Quellcode:
procedure GruppenButtonWurdeGeklickt(const AEditText: string);
var
  li: integer; // Schleifenzaehler
  NewScrollBox: TScrollBox;
begin
  NewScrollBox := CreateProductScrollboxWithButtons;
  for li := 0 to NewScrollBox.ComponentCount-1 do
  begin
    if (NewScrollBox.Components[li] is TProductButton) then
    begin
      TProductButton(NewScrollBox.Components[li]).StringProperty := AEditText;
    end;
  end;
end;

shmia 19. Apr 2011 12:34

AW: wert "durchreichen" ?
 
Nur mal so ganz grundsätzlich:
Das Ableiten von Controls (visuelle Komponenten) ist von Ausnahmefällen abgesehen absolut nicht empfehlenswert.
Man kann Objekte in zwei Kategorien einteilen:
* unabhängig von der Anwendung
* spezialisiert auf die Anwendung
Controls (bzw. Komponenten allgemein) sind wie Legosteine; man kann sie unverändert in vielen versch. Projekten einsetzen.
Daneben gibt es aber auch eigene Klassen (sog. Business-Objekte), die ganz speziell auf die Anwendung zugeschnitten sind.

Was hier in deinem Projekt wahrscheinlich fehlt ist eine Artikel-Klasse.
Diese Objekte tragen die Informationen (z.B. Artikelnummer, Beschreibung, DB-Schlüssel, Status,...) und werden zwischen den Formularen ausgetauscht.
Wenn du diese Artikel-Klasse in eine eigene Unit packst, dann kannst du Artikelobjekte problemlos zu versch. Formularen durchreichen.
Neben einer Artikel-Klasse wirst du möglicherweise weitere Klassen benötigen: Artikelliste, Artikelgruppe.

Die einzigen Komponenten, die anwendungsspezifisch abgeleitet werden dürfen sind: TForm und TFrame.

ConnorMcLeod 19. Apr 2011 12:53

AW: wert "durchreichen" ?
 
Zitat:

Zitat von shmia (Beitrag 1096021)
Was hier in deinem Projekt wahrscheinlich fehlt ist eine Artikel-Klasse.

Siehe TProductButton und TProductButton.StringProperty ;-)

khh 19. Apr 2011 14:27

AW: wert "durchreichen" ?
 
Zitat:

Zitat von shmia (Beitrag 1096021)
Nur mal so ganz grundsätzlich:
Das Ableiten von Controls (visuelle Komponenten) ist von Ausnahmefällen abgesehen absolut nicht empfehlenswert.
Man kann Objekte in zwei Kategorien einteilen:
* unabhängig von der Anwendung
* spezialisiert auf die Anwendung
Controls (bzw. Komponenten allgemein) sind wie Legosteine; man kann sie unverändert in vielen versch. Projekten einsetzen.
Daneben gibt es aber auch eigene Klassen (sog. Business-Objekte), die ganz speziell auf die Anwendung zugeschnitten sind.

Was hier in deinem Projekt wahrscheinlich fehlt ist eine Artikel-Klasse.
Diese Objekte tragen die Informationen (z.B. Artikelnummer, Beschreibung, DB-Schlüssel, Status,...) und werden zwischen den Formularen ausgetauscht.
Wenn du diese Artikel-Klasse in eine eigene Unit packst, dann kannst du Artikelobjekte problemlos zu versch. Formularen durchreichen.
Neben einer Artikel-Klasse wirst du möglicherweise weitere Klassen benötigen: Artikelliste, Artikelgruppe.

Die einzigen Komponenten, die anwendungsspezifisch abgeleitet werden dürfen sind: TForm und TFrame.

klingt logisch und gut,

ich danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 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