Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   $REGION funktioniert nicht bei [Attributen] (https://www.delphipraxis.net/215544-%24region-funktioniert-nicht-bei-%5Battributen%5D.html)

t2000 25. Jul 2024 10:09

$REGION funktioniert nicht bei [Attributen]
 
Hallo,

Hab nur ich das Problem oder liegt hier ein Bug vor

Ich nutze gerne
Delphi-Quellcode:
{$REGION 'Beschreibung'}
{$ENDREGION}
Wenn ich aber innerhalb dieses Bereiches Attribute nutze, funktioniert es nicht mehr.
Beispiel eines [async] Attributs vor einer Prozedur
Delphi-Quellcode:
{$REGION 'Eine Funktion'}
function EineFunktion: String;
var
  xy: Integer;

  [async] procedure Success;
  begin
    DoSomething;
  end;

begin
  MachWas( TSuccessProc( @Success));
end;
{$ENDREGION}
In diesem Beispiel funktioniert die Region nicht wegen, wegen dem "[async]" Attribut. Lösche ich das, funktioniert wieder alles.

Bug oder Problem mit meinem Delphi?

VG
Thomas

Uwe Raabe 25. Jul 2024 11:07

AW: $REGION funktioniert nicht bei [Attributen]
 
Das Beispiel funktioniert hier unter Delphi 12.1, aber ich habe natürlich nur rudimentäre Deklarationen von asyncAttrribute, TSuccessProc, DoSomething und MachWas deklariert: https://app.screencast.com/TtTpVgb70ByY5
Delphi-Quellcode:
type
  asyncAttribute = class(TCustomAttribute);
  TSuccessProc = procedure;

procedure DoSomething;
begin

end;

procedure MachWas(proc: TSuccessProc);
begin

end;

{$REGION 'Eine Funktion'}
function EineFunktion: String;
var
  xy: Integer;

  [async] procedure Success;
  begin
    DoSomething;
  end;

begin
  MachWas( TSuccessProc( @Success));
end;
{$ENDREGION}

t2000 25. Jul 2024 11:11

AW: $REGION funktioniert nicht bei [Attributen]
 
Hallo Uwe,

erweiter mal bitte den Code um eine geschaltelte Region.
Dann funktioniert es nicht mehr (nicht mehr korrekt)

Hier als Beispiel:

Delphi-Quellcode:
type
  asyncAttrribute = class(TCustomAttribute);
  TSuccessProc = procedure;

procedure DoSomething;
begin

end;

procedure MachWas(proc: TSuccessProc);
begin

end;

{$REGION 'Alles'}

{$REGION 'Eine Funktion'}
function EineFunktion: String;
var
  xy: Integer;

  [async] procedure Success;
  begin
    DoSomething;
  end;

begin
  MachWas( TSuccessProc( @Success));
end;
{$ENDREGION}

procedure DoSomething2;
begin

end;

procedure MachWas2(proc: TSuccessProc);
begin

end;
{$ENDREGION}

DeddyH 25. Jul 2024 11:41

AW: $REGION funktioniert nicht bei [Attributen]
 
Delphi-Quellcode:
type
  asyncAttrribute = class(TCustomAttribute);
  TSuccessProc = procedure;

procedure DoSomething;
begin

end;

procedure MachWas(proc: TSuccessProc);
begin

end;

{$REGION 'Alles'}

{$REGION 'Eine Funktion'}
function EineFunktion: String;
var
  xy: Integer;

  [async] procedure Success;
  begin
    DoSomething;
  end;

begin
  MachWas( TSuccessProc( @Success));
end;
{$ENDREGION 'Eine Funktion'}

procedure DoSomething2;
begin

end;

procedure MachWas2(proc: TSuccessProc);
begin

end;
{$ENDREGION 'Alles'}
So scheint es bei mir zu gehen.

t2000 25. Jul 2024 12:10

AW: $REGION funktioniert nicht bei [Attributen]
 
Ich habe jetzt verschiede DInge ausprobiert.
Es muss nicht geschachtelt sein, es reicht wenn darunter noch weitere Regionen kommen.

Auch wenn ich jede Region mit identischen Namen beschreibe, funktioniert es bei mir nicht.
Ich muss erst das [async] löschen, dann geht alles.

Uwe Raabe 25. Jul 2024 12:23

AW: $REGION funktioniert nicht bei [Attributen]
 
Mit der Wrapper-Region kann ich es nachvollziehen. Leg doch bitte einen Bugreport im neuen Portal an.

himitsu 25. Jul 2024 12:35

AW: $REGION funktioniert nicht bei [Attributen]
 
Zitat:

Delphi-Quellcode:
MachWas( TSuccessProc( @Success));

Und das Funktioniert so?

Diese Embedded-Prozeduren haben unter Umständen einen "unsichtbaren" ersten Parameter,
so ähnliche wie das "Self" bei Methoden, wo der Kontext zu den geteilten Variablen drin steht,
was dann nicht mit der Signatur deines TSuccessProc übereinstimmt.

Das sagt dir der Compiler aber auch, da er die Übergabe dieser Prozedur hier eigentlich nicht zulässt,
wenn du nicht grob fahrlässig und bösartig, durch dein rumgepointere, die Prüfungen aushebeln würdest.

Delphi-Quellcode:
function EineFunktion: String;
var
  xy: Integer;

  procedure Success;
  begin
    Result := DoSomething(xy); // Zugriff auf XY und/oder Result
  end;
begin
  ...

t2000 25. Jul 2024 12:46

AW: $REGION funktioniert nicht bei [Attributen]
 
Eingetragen:
https://embt.atlassian.net/servicede...tal/1/RSS-1442

haentschman 25. Jul 2024 12:52

AW: $REGION funktioniert nicht bei [Attributen]
 
Liste der Anhänge anzeigen (Anzahl: 1)
...ich habe keine Rechte und in meiner Liste ist aktuell der Letzte RSS-1441. :?

t2000 25. Jul 2024 12:54

AW: $REGION funktioniert nicht bei [Attributen]
 
@himitsu
Das ganze ist in einer TMS Web Core Umbebung. Es wird anschließend nach javascript übersetzt. Daher ist auch das [async] vorhanden.
Das Type-Casting ist nur, damit der Compiler nicht meckert. Die Adressierung geht nur so, damit es in javascript richtig funktioniert. (pas2js: https://wiki.freepascal.org/pas2js)
Aber der ganze Code sollte eigentlich kleinen Einfluss auf des $REGION haben, nach meiner Meinung.

Es ist jetzt nur unschön, aber natürlich nicht entscheidend für die Programmierung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 1 von 2  1 2      

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