Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Enumeration kann nich angesprochen werden? (https://www.delphipraxis.net/165512-enumeration-kann-nich-angesprochen-werden.html)

schneidc 3. Jan 2012 15:21

Enumeration kann nich angesprochen werden?
 
Hallo,

ich habe Probleme beim dynamischen entfernen der Kante eines Panels. Es geht dabei um folgenden Aufruf:
Code:
TPanel.BevelInner:=bvNone;
Das Problem ist, dass der Enumerationswert "bvNone" zum einen in der Unit "Controls" - die ja zum Standardumfang von Delphi gehört - als auch einer weiteren Unit einer 3rd Party Bibliothek vorkommt und sich der Linker dummerweise aus der falschen bedient. Mein Versuch die Zuweisung quasi mit dem Holzhammer zu machen schlug leider fehl.
Code:
TPanel.BevelInner:=Controls.TBevelCut[0];
Das Problem hierbei ist, dass der Linker durch das Stichwort "Controls" sich auf die Property TWinControl.Controls innerhalb der Unit Controls bezieht und nicht auf die Unit an sich.

Jetzt bin ich mit meinem Latein am Ende und erklären kann ich mir das Verhalten auch nicht. Was kann ich tun, um Zugriff auf TBevelCut zu erhalten?


Danke
Simon

DeddyH 3. Jan 2012 15:32

AW: Enumeration kann nich angesprochen werden?
 
Evtl. genügt es bereits, wenn Du die Unit Controls in der uses-Klausel nach hinten verschiebst.

olee 3. Jan 2012 15:34

AW: Enumeration kann nich angesprochen werden?
 
Schreib doch einfach
Delphi-Quellcode:
TPanel.BevelInner:=Controls.bvNone;

MFG
Björn Zeutzheim

schneidc 3. Jan 2012 15:36

AW: Enumeration kann nich angesprochen werden?
 
@DeddyH
Danke für den Tipp, aber das hatte ich leider schon erfolglos versucht :(

@olee
Damit habe ich das gleiche Problem, dass er sich auf die Property "Controls" und nicht auf die Unit bezieht.

olee 3. Jan 2012 15:41

AW: Enumeration kann nich angesprochen werden?
 
Dann mach es doch so:
Mach ne kleine statische (am besten inline) Methode, welche dir deinen Wert zurückgibt:
Delphi-Quellcode:
function GetBvNone: Controls.TBevelCut; inline;
begin
  Result := Controls.bvNone;
end;

schneidc 3. Jan 2012 15:46

AW: Enumeration kann nich angesprochen werden?
 
Super, das hat geholfen! Danke :-D

Zitat:

Zitat von olee (Beitrag 1144171)
Dann mach es doch so:
Mach ne kleine statische (am besten inline) Methode, welche dir deinen Wert zurückgibt:
Delphi-Quellcode:
function GetBvNone: Controls.TBevelCut; inline;
begin
  Result := Controls.bvNone;
end;


olee 3. Jan 2012 15:48

AW: Enumeration kann nich angesprochen werden?
 
Das praktische daran: Durch das inline findet in wirklichkeit ja kein Funktionsaufruf statt, sondern nichts weiter als die Zuweisung, da der Delphi-Compiler das dadurch entsprechend optimiert.

himitsu 4. Jan 2012 01:04

AW: Enumeration kann nich angesprochen werden?
 
Zitat:

Zitat von olee (Beitrag 1144173)
Das praktische daran: Durch das inline findet in wirklichkeit ja kein Funktionsaufruf statt, sondern nichts weiter als die Zuweisung, da der Delphi-Compiler das dadurch entsprechend optimiert.

Solange er die neue Methode vor deren Verwendung implementiert hat.
Kommt die Implementation erst später, wird nicht geinlinet, da der Compiler den Code noch nicht kennt. :stupid:

(böse Falle, wenn man zwingend das Inline benötigt)

olee 4. Jan 2012 02:22

AW: Enumeration kann nich angesprochen werden?
 
Das funktioniert aber auch nur wenn die Funktion vordeklariert wurde, was hier aber sowieso garnicht beabsichtigt wurde.
Aber guter Hinweis - das mit dem inline.

Namenloser 4. Jan 2012 04:05

AW: Enumeration kann nich angesprochen werden?
 
Wobei es hier eh um GUI-Zeug geht, von daher kann man den Overhead durch den Funktionsaufruf hier echt mal vernachlässigen :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz