Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "nichts" für einen Record (https://www.delphipraxis.net/83276-nichts-fuer-einen-record.html)

xZise 30. Dez 2006 13:30


"nichts" für einen Record
 
Ich habe in Unit B (ist ein Formular) ein Record:
Delphi-Quellcode:
type
  TData = record
    Name : string;
    Age : Integer;
  end;
Jetzt rufe über Unit A die Unit B auf (ein Fenster erscheint), indem man die Daten ändert, oder eine neue Person erstellt.
Jetzt möchte ich die Anzeige Prozedur aufrufen:
(Aufruf:)
Delphi-Quellcode:
procedure CreatePerson;
begin
  UnitB.FormB.ShowModal("nichts");
end;
(AnzeigeProzedur:)
Delphi-Quellcode:
procedure ShowModal(data : TData);
begin
  if data = "nichts" then begin
    // Formular zum "Ersteller" machen
  end else begin
    // Forumlar zum "Editor" machen
  end;
end;
Meine Frage ist jetzt: Wie kann ich "nichts" übergeben?
Mit "nil" funktioniert es nicht:
"Er erwartet keinen Pointer"

Kann ich es ggf. anders umsetzen?

Klaus01 30. Dez 2006 13:35

Re: "nichts" für einen Record
 
Du könntest in dem Record noch eine Bolean Variable einführen
und diese auf false setzen wenn in dem Record keine Daten vorhanden sind.
Wenn Daten in das Record eingelesen werden, dann den Bolean auf true setzen.

Oder data.Name im Programmanfang initialieren auf ''
und dann im weiteren Programmablauf auf data.name <> '' prüfen.

Grüße
Klaus

Khabarakh 30. Dez 2006 13:54

Re: "nichts" für einen Record
 
Warum nimmst du nicht einfach zwei getrennte Methoden: Einmal zum Erstellen, einmal zum Bearbeiten :gruebel: ?

xZise 30. Dez 2006 14:00

Re: "nichts" für einen Record
 
Zitat:

Zitat von Klaus01
Du könntest in dem Record noch eine Bolean Variable einführen

Oder data.Name im Programmanfang initialieren auf ''

Ich wollte eigentlich verhindern, dass überhaupt ein Parameter übergeben werden muss ;)


Zitat:

Zitat von Khabarakh
Warum nimmst du nicht einfach zwei getrennte Methoden: Einmal zum Erstellen, einmal zum Bearbeiten :gruebel: ?

Gute Idee! Mache ich ;) Aber wer mir agen kann, wie ich "nichts" übergeben kann, kann sich immer noch melden :D

Thorben_K 30. Dez 2006 14:07

Re: "nichts" für einen Record
 
wie wäre es mit einem Vorgabe Parameter im "ShowModal"

Delphi-Quellcode:

procedure ShowModal(data : TData = Data1);
begin
  if data = data1 then begin
    // Formular zum "Ersteller" machen
  end else begin
    // Forumlar zum "Editor" machen
  end;
end;
Glaube so geht es :)

sonnst muss data1 noch irgendwo definieren, aber eig müsste es so ja gehen

Gruss Thorben

Flare 30. Dez 2006 14:08

Re: "nichts" für einen Record
 
Zitat:

Zitat von xZise
Aber wer mir agen kann, wie ich "nichts" übergeben kann, kann sich immer noch melden :D

Hängt dieses "nichts" nicht sowieso vom verwendeten Datentyp ab?

Als PChar wäre es #0
Als Char ebenfalls #0
Als String wäre es ''
und als Integer 0
Als Boolean false
und als Pointer nil

Und sowieso kannst du bei einem Record nicht einmal ein Vergleich mit einem String machen, oder war das bloß zur Veranschaulichung?

Und aners lösen kann man es, indem man, wie Khabarakh schon sagte, die Prozeduren nochmal unterteilt (ist ohnehin sauberer)


Flare

Sunlight7 30. Dez 2006 14:15

Re: "nichts" für einen Record
 
Zitat:

Zitat von xZise
Gute Idee! Mache ich ;) Aber wer mir agen kann, wie ich "nichts" übergeben kann, kann sich immer noch melden :D

Einen noch schnell:

Delphi-Quellcode:
type
   PData=^TData
   TData = record
    Name : string;
    Age : Integer;
  end;
Delphi-Quellcode:
procedure ShowModal(data : PData);
begin
  if data = nil then begin
    // Formular zum "Ersteller" machen
  end else begin
    // Forumlar zum "Editor" machen
    Data^.Name...
  end;
end;
Und Weg, bis heut Abend :mrgreen:

Thorben_K 30. Dez 2006 14:18

Re: "nichts" für einen Record
 
wer arbeitet schon freiwillig mit Pointern, da kann man ja auch gleich in C programieren :) aber funktionieren wird es auf jeden fall :)

SirThornberry 30. Dez 2006 14:20

Re: "nichts" für einen Record
 
wenn man nicht mit Pointer arbeiten will kann man das ganze auch überladen. Dann eine Fuktion mit einem Stringparamter nehmen und eine mit einen TData-Paramter

xZise 30. Dez 2006 14:31

Re: "nichts" für einen Record
 
Delphi-Quellcode:
    function Execute(inItem : TItemData) : Boolean; overload;
    function Execute : Boolean; overload;
Diese Lösung ist auch die Beste ;) danke @ all ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz