[gelöst] call by value und TEdit

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
RudiRatlos
Beiträge: 17
Registriert: Sa 21. Sep 2019, 13:02
OS, Lazarus, FPC: Windows 10, FPC: 3.2.2, L 3.0
CPU-Target: 64Bit
Wohnort: München

[gelöst] call by value und TEdit

Beitrag von RudiRatlos »

Hallo,
ich habe mal wieder eine dumme Frage:
Angenommen ich hätte eine Prozedur

Code: Alles auswählen

procedure test (edt : TEdit)
begin
  edt.Text := 'neuer Text';
//  bla bla bla
end;
dann würde ich eigentlich erwarten, dass ein Aufruf im Hauptprogramm von

Code: Alles auswählen

Edit1.Text := 'alter Text';
test (Edit1);
showMessage (Edit1.text);
den alten Text zeigt. Tut es aber nicht, d. h. es wird behandelt, als hätte ich die Prozedur mit Parameter by Reference geschrieben

Code: Alles auswählen

procedure test (var edt : TEdit)
Meine Frage
- Ist das irgendwo dokumentiert?
- Vielleicht gilt das immer für Objekte
- Was ist bei TStringList?

ich mache mal wieder meinem Namen Ratlos alle Ehre und bedanke mich schon jetzt für eine Antwort
Zuletzt geändert von RudiRatlos am Do 27. Okt 2022, 12:32, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: call by value und TEdit

Beitrag von theo »

RudiRatlos hat geschrieben:
Do 27. Okt 2022, 12:14
- Vielleicht gilt das immer für Objekte
Genau. Es wird ja kein neues TEdit erstellt, welches einen andern Text halten könnte. Es gibt nur das Eine.

RudiRatlos
Beiträge: 17
Registriert: Sa 21. Sep 2019, 13:02
OS, Lazarus, FPC: Windows 10, FPC: 3.2.2, L 3.0
CPU-Target: 64Bit
Wohnort: München

Re: call by value und TEdit

Beitrag von RudiRatlos »

Sehr vielen Dank für Deine Antwort!

Also salopp gesagt, alles was man mit Create erzeugen muss, benimmt sich so, oder?

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: call by value und TEdit

Beitrag von theo »

RudiRatlos hat geschrieben:
Do 27. Okt 2022, 12:29
Sehr vielen Dank für Deine Antwort!

Also salopp gesagt, alles was man mit Create erzeugen muss, benimmt sich so, oder?
Ja, salopp. :wink:
Fliegermichl hat aktuell ein bisschen was dazu geschrieben viewtopic.php?f=55&t=14534
Du kannst dich auch dort noch dran hängen, wenn du mehr wissen möchtest.

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: [gelöst] call by value und TEdit

Beitrag von Thandor »

Das Verhalten erklärt sich aus der Tatsache, dass Objektvariablen (also die Instanz einer Klasse) ein verstekter Pointer ist. Deiner Prozedur wird also eine Adresse übergeben.

Antworten