AGB  ·  Datenschutz  ·  Impressum  







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

Konzeptfrage Wertübergabe

Ein Thema von martin_ · begonnen am 10. Sep 2009 · letzter Beitrag vom 10. Sep 2009
Antwort Antwort
martin_

Registriert seit: 19. Mai 2008
Ort: Österreich
89 Beiträge
 
#1

Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:16
Hallo,
ich habe folgendes Problem: Gegeben ist ein Formular mit einer Listbox die als Einträge zb. Ziffern von 1 bis 10 hat. Dieses Formular befindet sich in UnitA. Ein weiteres Formular (UnitB) besteht aus einem Eingabefeld und einem Button um die Eingabe zu prüfen.
Der Benutzer wählt einen Eintrag aus der Listbox, durch Betätigung der Enter Taste wird UnitB als modaler Dialog angezeigt. Der Prüfen Button wird betätigt um Duplikate in der Liste zu finden.
Wie funktioniert die Übergabe der Parameter? Von UnitA kann auf UnitB zugegriffen werden. Von UnitB kann nicht auf UnitA zugegriffen werden.
Ist es sinnvoll eine Referenz mit der Liste der Einträge an UnitB zu senden, um diese dort zu verarbeiten (Prüfen ob durch Eingabe Duplikate entstanden sind), oder gibt es eine bessere Möglichkeit? Das ganze auf einem Formular zu realisieren ist nicht möglich.
Eine Möglichkeit die mir noch eingefallen ist, wäre eine eigene Unit die nur die Daten für die Liste beinhaltet und UnitA und UnitB haben Zugriff auf diese. Was ist in so einem Fall vernünftig?
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:24
Schau mal nach WM_Copydata

Quellcode in der versendenden Unit
Delphi-Quellcode:
type TDatenaustausch = record
  dwData, cdData: integer;
  lpData: string;
end;

...

// result ist hier ein string (liegt also in einer Funktion: string)!!
 with Datenaustausch do
        begin
          dwData := 0;
          cdData := Length(result) + 1;
          lpData := result;
        end;
      SendMessage(LoaderForm.Handle, WM_COPYDATA, Longint(Handle),
              Longint(@Datenaustausch));
Quellcode in der empfangenden Unit
Delphi-Quellcode:
procedure Nachricht_anzeigen(var MSG: TWMCopyData);message WM_COPYDATA;
begin
  Label.Caption := String(PChar(Msg.CopyDataStruct.lpData));
end;
So tausche ich Daten bei der Initalisierung meines Projektes aus. Also die einzelnen Units senden Berichte an das Splash mit dem was sie gerade machen. Funktioniert bei mir wunderbar.
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:25
Die saubere Lösung ist eine konsequente Trennung der Daten von der Oberfläche. Also eine dritte Unit mit einer eigenen Klasse, die die Datenverwaltung übernimmt.

Ansonsten ginge auch eine Übergabe der zu bearbeitenden Daten als Referenz. Das ist zwar nicht ganz so schön, aber immer noch eine saubere Lösung.

Ein direkter gegenseitiger Zugriff wäre auch möglich, aber das wäre unübersichtlich und das Gegenteil von gutem Code. Denn man kann die erste Unit in der zweiten einfach unterhalb von implementation in die uses legen. (Ich hoffe ich habe dich jetzt nicht auf dumme Gedanken gebracht, das ist keine gute Lösung...)

// EDIT:
WM_COPYDATA? Wozu das? Man kann doch einfach die Referenz auf die Daten benutzen, es ist doch der selbe Prozess usw.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:27
Wozu WM_COPYDATA in diesem Fall? Es handelt sich doch nicht um IPC. Der Ansatz mit der "Brückenunit" erscheint mir vernünftig, so sollte man es IMHO mit gemeinsam genutzten Variablen/Konstanten immer halten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:28
.. kannst Du die Daten nicht beim Erstellen des Dialogs übergeben?

Delphi-Quellcode:
dialog := TDialog.create('deineDaten);
dialog.showModal;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 14:33
hmm Mist, da war ich mal froh als erster zu antworten aber habt recht, bei mir läuft da noch nen Threat nebenbei, deswegen der Umstand bei meinem Copydata.
Schließe mich der Meinung von DeddyH und jaenicke an.
2. Account Sero
  Mit Zitat antworten Zitat
martin_

Registriert seit: 19. Mai 2008
Ort: Österreich
89 Beiträge
 
#7

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 15:18
@Klaus01 : Wenn nur die Parameter übergeben werden, benötige ich noch eine Methode die als Ergebnis die Information liefert ob Duplikate vorhanden sind oder nicht. Die würde immer nach betätigen des "Prüfen Button" aufgerufen werden. Es wäre aber auch nicht schlecht diese Methode in der anderen Unit verfügbar zu haben. Würde auch funktionieren, nur hätte ich dabei 2x den selben Code. Aus diesem Grund werde ich es mit einer dritten Unit machen die mir die Daten speichert und auch die Berechnungen durchführt.

Mich würde noch ein Beispiel für eine "Daten Unit" von einem Projekt interessieren.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 15:23
Zitat von martin_:
@Klaus01 : Wenn nur die Parameter übergeben werden, benötige ich noch eine Methode die als Ergebnis die Information liefert ob Duplikate vorhanden sind oder nicht.
Um das zu überprüfen könntest Du ModalResult verwenden.

Was mir vielleicht entgangen ist, wird in dem Dialog auch ein neuer Wert in die Liste
aufgenommen?
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 15:27
Zitat von martin_:
Mich würde noch ein Beispiel für eine "Daten Unit" von einem Projekt interessieren.
Im Grunde wäre meine Einstellungsklasse eine Demo dafür. Da geht es ja auch darum Daten (hier Einstellungen) zur Verfügung zu haben.
http://www.delphipraxis.net/internal....php?p=1042717
Da wird eine eigene Klasse erstellt und dann werden deren Daten benutzt. Eine Demo ist ja dabei.

In deinem Fall können da dann auch direkt noch Möglichkeiten zur Sortierung oder so drin sein, je nachdem was du mit den Daten alles machen willst. Wichtig ist nur, dass die Oberfläche selbst auch nur das enthält was zur Oberfläche gehört. Das heißt die Datenlogik usw. gehört auch in die entsprechende Unit soweit möglich.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
martin_

Registriert seit: 19. Mai 2008
Ort: Österreich
89 Beiträge
 
#10

Re: Konzeptfrage Wertübergabe

  Alt 10. Sep 2009, 15:34
Zitat von Klaus01:
ir vielleicht entgangen ist, wird in dem Dialog auch ein neuer Wert in die Liste
aufgenommen?
Es wird bestimmt vorkommen.

@jaenicke
Danke für das Beispiel. Schaus mir gleich an.
  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 14:37 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