![]() |
einen Record unter Public freigeben?
Ich hab das Problem, dass ich einer Variable von einer 2. Form aus werte übergeben will.
Jetzt müsste ich dafür die variable ja einfach im Public-bereich von Form1 deklarieren. Mein Problem ist jetzt nur, dass ich nen Record hab.
Delphi-Quellcode:
Nun will ich die Variable Startwert aber irgendwie freigeben, so dass ich drauf zugreifen kann.
type StartTyp = ^Startelement;
Startelement=record Startdatum : TDate; StartSchicht : String[10]; StartSchichtNr : Shortint; end;
Delphi-Quellcode:
allerdings kann ich diese zeile ja nit unter public reinschreiben, da er da den typ noch nicht kennt, da ich das ja erst hinter dem Public hab.
Startwert:StartTyp;
Und ich wüsste nicht, wie ich das mit dem Record vorher machen kann, da er dort keine = erlaubt, sondern immer meldet : erwartet. Hat einer von euch ne lösung wie ich die trotzdem freigeben kann, muss ja irgendwie funktionieren, denk ich mal ;) |
Re: einen Record unter Public freigeben?
Schreib doch die Record-Deklaration vor die Deklaration von deinem Form oder packs in eine Extra Unit und binde die per uses ein ;)
|
Re: einen Record unter Public freigeben?
Ok, hab jetzt den komplettentype bereich über den anderen gesetzt, wusste nicht dass das klappt, Thx
|
Re: einen Record unter Public freigeben?
Ich hab jetzt allerdings ein weiteres Problem. Und zwar bekomme ich jetzt immer eine Access-Violation, wenn ich versuche aus form2 einen Wert zu übergeben.
In Form 2 will ich das übergeben:
Delphi-Quellcode:
die erste Unit hab ich in den Uses der 2. hinzugefügt.
Form1.Startwert.Startdatum:=Kalender1.Date;
Der Abbruch wird mir in der zeile dann angezeigt, die auch oben steht. In Form 1 hab ich die deklaration des Records in zwischen die Uses und die type-deklaration der Form und der anderen Komponenten.
Delphi-Quellcode:
So sieht der Public-Bereich aus:
type StartTyp = ^Startelement;
Startelement=record Startdatum : TDate; StartSchicht : String[10]; StartSchichtNr : Shortint; end;
Delphi-Quellcode:
Kann mir eventuell jemand verraten, was ich noch beachten muss?
public
{ Public-Deklarationen } Startwert:StartTyp; end; |
Re: einen Record unter Public freigeben?
forderst du denn irgendwo speicher für "Startwert" an?
Im übrigen ist es üblich die records mit "T" vorran zu deklarieren und die Pointer auf die Structor mit "P" also so:
Delphi-Quellcode:
so sieht man dann im quelltext auch sofort was ein Typ ist und was eine variable ist (denn wer weiß schon ahnhand des namens "Startelement" ob "Startelement" ein typ oder eine varialbe ist. Wenn es allerdings "TStartelement" heißt weiß jeder gleich das es ein Typ ist. Und bei "PStartelement" weiß eigentlich auch jeder sofort das es ein Pointer auf den Typ "TStartelement" ist.
type
PStartelement = ^TStartelement; TStartelement=record Startdatum : TDate; StartSchicht : String[10]; StartSchichtNr : Shortint; end; |
Re: einen Record unter Public freigeben?
Stimmt, das mit dem Speicher hab ich ganz vergessen, wird ja nicht durch Var initialisiert.
Muss ich außer
Delphi-Quellcode:
in der ausführen-Procedure noch etwas hinschreiben, wel es Funktioniert ja.
new(Form1.Startwert);
Nach bearbeitung der Procedur wird die Form2 geschlossen, dann muss ich nicht nochmal extra das element freigeben, oder, das wird doch dann vom Programm übernommen? |
Re: einen Record unter Public freigeben?
das freigeben wird vom programm übernommen wenn du es mal schließt. Aber angenommen dein Programm läuft ein jahr lang und es wird immer nur die Procedure neu gestartet dann müllst du natürlich den speicher voll. Also füge einfach ein "dispose" ein wenn du fertig bist, auf die eine zeile kommts ja nicht an.
|
Re: einen Record unter Public freigeben?
Jo, hab jetzt das freigeben noch mit reingebracht.
Warum muss man eigentlich áuch in der Unit (Form1), in der man den Record und die Variable deklariert hat auch einen Speicherplatz dafür erstellen, wird dass nicht normal durch das Programm gemacht? |
Re: einen Record unter Public freigeben?
Zitat:
Das ganze wäre mit einer Klasse wohl hübscher zu lösen. (Die hätte dann vielleicht auch noch Properties, Methoden und Erdbeerkuchen dabei :) ) |
Re: einen Record unter Public freigeben?
Hmm, dann müsst ich mich hier im Forum mal nach Klassen umsehen, hab ich noch nie mit gearbeitet.
Aber mit dem Pointer auf nil haste recht, gar nit dran gedacht^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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