AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid: Scroll-Focus entfernen

Ein Thema von Int3g3r · begonnen am 25. Apr 2019 · letzter Beitrag vom 26. Apr 2019
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Stringgrid: Scroll-Focus entfernen

  Alt 25. Apr 2019, 15:13
Hallo,
eine Prozedur hat keinen Rückgabewert, kann aber Rückgabeparameter (Referenzparameter) haben.


function Foo1(S: String): Integer;
S: Parameter
: Integer = Rückgabewert der Funktion

procedure Proc1(S: String);
S: Parameter

procedure Proc2(S: String; var X: Integer);
S: Parameter - Wertparameter
X: Parameter - Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch der Wert der Variable das Aufrufers

procedure Proc2(S: String; var X: Integer; Y: Integer);
S: Parameter
X: Parameter
Y: Parameter = Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch die Variable das Aufrufers
Wird Y in der Prozedur verändert, ändert sich die Variable das Aufrufers NICHT

Das var kann man sich wie einen Pointer (eine Referenz) auf die eigentliche Variable beim Aufrufer vorstellen, der an die Prozedur übergeben wird.

http://bergt.de/workshop/delphi/html/delphi39.htm
Heiko

Geändert von hoika (26. Apr 2019 um 07:34 Uhr)
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Stringgrid: Scroll-Focus entfernen

  Alt 26. Apr 2019, 07:35
procedure Proc2(S: String; var X: Integer; Y: Integer);
S: Parameter
X: Parameter
Y: Parameter = Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch die Variable das Aufrufers
Wird Y in der Prozedur verändert, ändert sich die Variable das Aufrufers NICHT

Das var kann man sich wie einen Pointer (eine Referenz) auf die eigentliche Variable beim Aufrufer vorstellen, der an die Prozedur übergeben wird.

http://bergt.de/workshop/delphi/html/delphi39.htm
"s,y" sind normale übergabeparameter
Die "var x" existiert dort wo sie aufgerufen wird:
Delphi-Quellcode:
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer;
   begin
          proc2(test, zahl1, zahl2 );
   end;
Somit wird beim aufruf eine druch die Variable "X" eine Referenz auf Zahl1 mitgegeben ?

Wäre dann folgendes zulässig ?
Delphi-Quellcode:
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer;
    X: integer; //X wird ja bereits in der proc2 als variable verwendet
   begin
          proc2(test, zahl1, zahl2 );
   end;
Danke für die Hilfe,

Int3g3r

Geändert von Int3g3r (26. Apr 2019 um 07:38 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Stringgrid: Scroll-Focus entfernen

  Alt 26. Apr 2019, 07:48
Hallo,
nein, ist nicht richtig.

Delphi-Quellcode:
procedure proc2(s: String; var x: Integer);
begin
  if s='then
  begin
    // diverser Code1
    x:= 1;
  end
  else
  begin
    // diverser Code2
    x:= 2;
  end;
end;

procedure proc1;
var
  s: String;
  x: Integer;
begin
  s:= 'Test';
  x:= 10;
  proc2(s,x);

     x ist ? -> 2, weil in proc2 ja steht
     // diverser Code2
     x:= 2;
  
  s:= '';
  proc2(s,x);

     x ist ? -> 1, weil in proc2 ja steht
     // diverser Code1
     x:= 1;
end;
Aber nu kommst !

Delphi-Quellcode:
procedure proc2(Max: String; var Moritz: Integer);
begin
  if Max='then
  begin
    // diverser Code1
    Moritz:= 1;
  end
  else
  begin
    // diverser Code2
    Moritz:= 2;
  end;
end;

procedure proc1;
var
  s: String;
  x: Integer;
begin
  s:= 'Test';
  x:= 10;
  proc2(s,x);

     x ist ? -> 2, weil in proc2 ja steht
     // diverser Code2
     Moritz:= 2;
  
  s:= '';
  proc2(s,x);

     x ist ? -> 1, weil in proc2 ja steht
     // diverser Code1
     Moritz:= 1;
end;
Die in proc1 definierte Variable x hat nichts mit dem Parameter x in proc2 zu tun!
Das war im Bsp. 1 einer Zufall. OK, war Absicht

In den Delphi-Quellen wird deshalb bei Parameter immer ein A vorangestellt (ARow).
Das dient einer besseren optischen Unterscheidung zwischen Parametern und Variablen.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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-2025 by Thomas Breitkreuz