Autor Beitrag
Xearox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 20.03.10 00:33 
Also, meine Frage ist hier, wie kann ich Folgenden Code in Unit2 Verkürzen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure RessProWave;
begin
  if not (Main.Form1.PBGold.Position=0then
    begin

    end;
end;


Ich will den Wert der Position der ProgressBar aus meiner Main Unit in der Unit2 Verwenden.
Ich habe hier in irgendeinen Thread gelesen, das man sowas in Public schreiben muss, jedoch komm ich da nicht weiter, da steht immer wieder, das der name PBGold nicht deklariert sei.
Also habe ich das so wie oben Probiert, so geht es, aber ich finde das einfahc zu lang, ich denke das es Kürzer geht, jedoch weiß ich nicht wie, kann mir hier jemand helfen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 20.03.10 00:42 
Dafür deklariere am besten ein Ereignis. Direkt auf Interna des zweiten Fensters so zuzugreifen ist unnötig kompliziert und unübersichtlich.
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 20.03.10 00:50 
Meinst du, das ich die Position der Progressbar als Variable in der MainUnit Festlegen soll, und diese dann in Unit2 verwenden soll?

Also Beispiel

MainUnit
ausblenden Delphi-Quelltext
1:
GoldVorrat:=PBGold.Position;					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 20.03.10 01:00 
Wenn, dann an die zweite Unit übergeben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure MachMist(Value1: String; ProgressDisplay: TProgressBar);
begin
  ProgressDisplay.Position ...
end;
Das meinte ich zwar nicht, geht aber natürlich auch, ist halt nur nicht ganz so elegant.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.03.10 02:30 
Beides ist schlecht. Warum nicht auf die Daten und/oder Ereignisse zurückgreifen von denen auch die Fortschrittanzeige ihre Daten erhält?
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: Sa 20.03.10 02:51 
wie meinst du das genau?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 21.03.10 14:52 
Also ich denke mal, dass Du das hier so weißt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TForm1 = class(TForm)
    //hier kommen dann die ganzen Komponenten hin, die Form1 enthält.
  private
    Wert:String;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    //Und hier können dann Deine Prozeduren und Funktionen hin, auf die Du von einer anderen Unit aus zugreifen möchtest - z.B. auch solch eine Funktion:
    function WertAusForm1():String;
  end;

public function TForm1.WertAusForm1():String;
begin
WertAusForm1:=Wert;
end;

Dann könntest Du aus Deiner Form2 doch so darauf zugreifen:
ausblenden Delphi-Quelltext
1:
meinWertAusForm1:=Form1.WertAusForm1();					

Oder möchtest Du da doch wirklich direkt drauf zugreifen? - Dann müsstest Du doch einfach nur das Ganze so schreiben, indem Du Deinen Wert eben wirklich als public definierst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TForm1 = class(TForm)
    //hier kommen dann die ganzen Komponenten hin, die Form1 enthält.
  private
    { Private-Deklarationen }
  public
    Wert:String;
    { Public-Deklarationen }
  end;

Dann heißt die Abfrage aus Form2 so:
ausblenden Delphi-Quelltext
1:
meinWertAusForm1:=Form1.Wert;					


Oder habe ich das ganze jetzt als zu einfache Fragestellung verstanden?
Dann entschuldigt...
Ich sehe ja gerade, 138 Beiträge können nicht mal eben von einem Neuling sein.
Xearox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260
Erhaltene Danke: 3



BeitragVerfasst: So 21.03.10 15:46 
ich lerne halt dazu.
Ich versuche erst ein Problem zu lösen, bevor ich das nächste anpacke.
Wenn ich irgendwas nicht verstehe, google ich danach, und versuch irgendwelche Tutorials darüber zu finden.


Also ich habe mehrere Units.
In der MainUnit erstelle ich Objekte auf der Form, die ich in den anderen Units verwenden möchte, wie zum Beispiel die ScrollBar, welche ich nutze, grafisch dazustellen, wie viele Ressourcen noch zum Abbauen vorhanden sind. Nun ist das so, das ich in der Unit Buildings dies so geschrieben hab: GoldVorrat:=Main.Form1.PBGold.Position;

die ScrollBar hab ich in der Form1 "PBGold" genannt, Buildings hat keine Form, ist einfach eine Unit, welche ich dazu verwende, die MainUnit übersichtlicher zu machen. Also jede Funktion oder Procedure auszulagern.

Nun ist die Frage, wie kann ich die ScrollBar, welche den namen PBGold hat, in der Unit Buildings, auch als PBGold verwenden kann, und nicht immer schreiben muss "Main.Form1.PBGold.Position".

weil wenn ich die in Public verschiebe, macht delphi Probleme, und meckert rum. (Also das hier in Public verschieben "ScrollBar1: TScrollBar;" und "procedure ScrollBar1Change(Sender: TObject);")