Lokale Variablen und Komponenten zugriff
spacer
Autor Nachricht
tetris84
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 12:56 
Hallo,

bis jetzt habe ich immer viel mit Free Pascal programmiert. In Delphi habe ich mich jetzt auch schon relativ gut als Anfänger zurecht gefunden. Jedoch habe ich noch 2-3 grundlegende Fragen die für eine saubere Programmierung zwingend nötig sind.
Frage 1:
Ich arbeite in meinem Hauptformular zum Beispiel mit einem Array das von vielen Verschiedenen proceduren und funktionen benutzt wird. Die einfache Lösung wäre es global zu deklarieren. Das möchte ich aber nicht. Wie kann ich dieses Array jetzt übergeben? Bei Aufrufen in Pascal geht das ja recht einfach: procedure (Array:TArray);
Aber wie ist das bei einem OnClick ereignis oder ähnlichen?

Frage 2:
Die Frage ist recht ähnlich. Wenn ich in meinem Hauptformular auf Speichern klicke gibt es natürlich die Procedure "OnClickSpeichernUnter" Ich möchte jetzt aus sicherheit den Code in eine andere Procedure schreiben da der gesamte Code ansonsten beim Löschen den Buttons SpeichernUnter gelöscht mit wird. Wie übegebe ich da dann den SaveDialog?


Ich hoffe ich habe meine Fragen richtig formuliert ;)

Lg tetris84
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 13:03 
Moin,

Du kannst die Array auch im Formular als Private deklarieren. Dann kannst Du innerhalb der Formularinstanz darauf zugreifen.
Du kannst ein SaveDialog in einer Procedure dynamisch erstellen, wenn Sie sie benötigst, ohne es vorher auf dem Formular zu platzieren.
Aber beim Löschen eines Buttons bleibt doch der Code bestehen. :wink:

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 13:36 
Wenn ich es unter Private deklariere ist es doch trotzdem noch global oder?

Es ist ja auf dem Formular platziert. Ich kann nur nicht von anderen Proceduren drauf zugreifen. Selbst wenn ich beim Aufruf Sender:TObject übergebe (ich weiß das soll man nicht).
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 19.12.11 13:41 
Wenn es Methoden sind derselben Klasse sind kannst Du direkt darauf zugreifen, sonst nicht...

ausblenden Delphi-Quelltext markieren
1:
2:
procedure TForm.Tuwas; // kann zugreifen
procedure Tuwas; // kann nicht direkt zugreifen

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 13:45 
Und wie kann ich dann indirekt drauf zugreifen? :/
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 13:50 
Dann müsstest Du es z.B. über eine Public Property "von außen" (also von außerhalb der Klasse) zugänglich machen.
Ich glaub, Dir fehlen noch einige absoluten Grundlagen. Du könntest Dir mal den Chrashkurs von Christian durcharbeiten: www.christian-stelzm...l/CrashkursReloaded/
Insbesondere das letzte Kapitel und mit dem Wissen im Hintergrund, dass ein Formular auch nur eine Klasse ist.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8118
Erhaltene Danke: 251

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mo 19.12.11 14:16 
Speichern mit Hilfe eines Savedialogs sollte man imho in etwa so machen:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
{MeinDatenObjekt.}SpeichereZeugs(SaveDialog1.Filename);
// je nachdem, ob man zur Datenverwaltung auch eine Klasse nutzt oder nicht
end;

// an anderer Stelle, ggf. sogar in einer anderen Unit:
procedure {TMeinDatenObjekt.}SpeichereZeugs(aFilename: String);
begin
// speichern
end;


Dann hat man den eigentlichen Code zum Speichern ausgelagert und kann ihn ggf. sogar an anderer Stelle weiter verwenden. Der Speichern-Code hat ja nichts mit dem Formular zu tun (es sei denn, du willst das Formular speichern ;-)). Daher sollte der in der Regel auch außerhalb der Form-Klasse stehen.

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 15:29 
Ok danke für die Hilfe manchmal sieht man glaub ich den Wald vor lauter Bäumen nicht :D

Ich hab nochmal ne frage zu den Globalen Variablen nur zum verständnis:
ausblenden Delphi-Quelltext markieren
1:
type TArrayName = array [0..10] of string;



ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure ButtonClick (...);
Begin
ShowMessage (Button2Array[1]);
End;


ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
procedure AndererButtonClick (...);
var Button2Array : TArrayName;
Begin
Button2Array[1] := 'Test';
End;



Wie würde ich Button2Array über procedure ButtonClick ausgeben lassen können?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 19.12.11 15:46 
so schon, aber schön ist anders....

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var 
Button2Array : TArrayName;

procedure AndererButtonClick (...);
Begin
Button2Array[1] := 'Test';
End;

procedure ButtonClick (...);
Begin
ShowMessage (Button2Array[1]);
End;

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 15:51 
Ja genau diese Variante hab ich zurzeit in meinen Programmen auch. Also geht es nicht anders?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 15:53 
Viele Wege führen nach Rom.
Du könntest das Array auch als Parameter an die Procedure übergeben. Ist immer eine Frage des konkreten Falls, welcher Weg der schönere/schnellere/bessere ist.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 15:59 
Genau und wie übergebe ich es dann? Ich meine beim ButtonClick weiß der Compiler dann ja nicht woher er das nehmen soll oder?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 16:08 
Beispiel:

ausblenden Delphi-Quelltext markieren
1:
2:
type
TMeinArray = Array[0..2] of string;


ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm10.btn1Click(Sender: TObject);
var
arr : TMeinArray;
begin

arr[0] := 'String 1';
arr[1] := 'String 2';
arr[2] := 'String 3';

TuWasMitArray(arr);

end;

procedure TForm10.TuWasMitArray(AArray: TMeinArray);
begin
ShowMessage(AArray[2]);
end;

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 19.12.11 16:21 
Wobei bei TuWas im Sinne von Änderung soll möglich sein folgende Deklaration erfordert:
ausblenden Delphi-Quelltext markieren
1:
procedure TForm10.TuWasMitArray(var AArray: TMeinArray);

_________________
Das Problem liegt üblicherweise zwischen den Ohren
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 16:24 
Ne ihr versteht mich glaub ich falsch. Beide Proceduren sind zum Beispiel ButtonClick oder so. Die kann man ja (meines Wissens nach) nicht von einer anderen Prozedur aufrufen oder?

Lg tetris84
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 16:27 
Ich glaub wir reden in der Tat aneinander vorbei. Mach mal ein konkretes Beispiel.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mo 19.12.11 16:30 
user profile icontetris84 hat folgendes geschrieben Zum zitierten Posting springen:
Ne ihr versteht mich glaub ich falsch. Beide Proceduren sind zum Beispiel ButtonClick oder so. Die kann man ja (meines Wissens nach) nicht von einer anderen Prozedur aufrufen oder?

Lg tetris84


meinst du sowas:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Button1Click(Sender : TObject);
begin
showmessage('Button eins geklickt');
end;

procedure Button2Click(Sender : TObject);
begin
showmessage('Button zwei geklickt');
end;

procedure Button3Click(Sender : TObject);
begin
Button2Click(Button2);
end;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 16:33 
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure Form1.OptionenButtonClick (Sender: TObject);
Begin
Array[5] := '1';


End;

procedure Form1.FormActivate(Sender: TObject);
Begin
If Array[5] = '1' Then
ShowMessage ('Super ich kann auf die Variable von OptionButtonClick zugreifen!');
End;



Und das hallt ohne das Array global zu deklarieren
Lg tetris84
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 929
Erhaltene Danke: 70


Delphi 2010 Enterprise
BeitragVerfasst: Mo 19.12.11 16:36 
Dann deklarier das Array im Private-Teil des Formulars.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: tetris84
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
tetris84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 19.12.11 16:44 
Aber ist es dann nicht trotzdem noch Global in der Form aufrufbar?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home