Delphi-PRAXiS

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 09: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 10: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 10: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 10: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 11: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 11: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 11: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 11:46

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

haentschman 25. Jul 2024 11: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 11: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.

t2000 25. Jul 2024 11:55

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

Zitat von haentschman (Beitrag 1539213)
...ich habe keine Rechte und in meiner Liste ist aktuell der Letzte RSS-1441. :?

Status ist erst "Ready for validation"

haentschman 25. Jul 2024 11:56

AW: $REGION funktioniert nicht bei [Attributen]
 
Die RS-1441 ist auch "Ready for validation" ... den kann ich sehen. :wink:

t2000 25. Jul 2024 12:05

AW: $REGION funktioniert nicht bei [Attributen]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von haentschman (Beitrag 1539216)
Die RS-1441 ist auch "Ready for validation" ... den kann ich sehen. :wink:

Hier ein Screenshot :)

Uwe Raabe 25. Jul 2024 12:22

AW: $REGION funktioniert nicht bei [Attributen]
 
Du musst by Shared With noch Embarcadero Customers hinzufügen (sollte eigentlich per Default schon so sein)

t2000 25. Jul 2024 13:27

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

Zitat von Uwe Raabe (Beitrag 1539220)
Du musst by Shared With noch Embarcadero Customers hinzufügen (sollte eigentlich per Default schon so sein)

Erledigt

himitsu 25. Jul 2024 14:43

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

TMS
OK, also mit einem "anderen" Compiler.

Normal besitzt diese Prozedur keine RTTI und daher wird dort "eigentlich" auch kein Attribut mit verlinkt.
Aber unabhängig davon nutze ich auch an manchen Stellen ein Attribut als Dokumentation, manchmal sogar ein "Undeklariertes" :duck:

Zitat:

Das Type-Casting ist nur, damit der Compiler nicht meckert.
Rate mal, warum der meckert. :wink:

OK, was dann am Ende der TMS-Compiler damit macht ... k.A.



Für das Zuklappen ... da kommt es erstmal drauf an, welcher Parser verwendet wird
und es kann gut sein, dass Dieser mit sowas einfach nicht klar kommt und abraucht.

t2000 25. Jul 2024 14:52

AW: $REGION funktioniert nicht bei [Attributen]
 
Das mit dem Compiler stimmt nicht ganz.
Die Entwicklung, mit alle Vorteilen von Delphi, läuft als Standard Win32 Compiler (ansichten, Automatiken). Also alles was sichtbar gemacht wird, wie Fehler, Hinweise, Autovervollständigung, läuft darüber.
Erst wenn wirklich compiliert wird, wird nicht mehr Win32 genutzt, sondern der FreePascal pas2js Transpiler. (nicht TMS !)

Das eine hat also mit dem andern erstmal nichts zu tun. Man entwicklet Win32 und compiliert pas2js.

Hier geht es aber um den Editor, der eigentlich wenig(?) damit zu tun haben sollte. Weiß ich aber nicht genau.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 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