AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Exportieren eines TYPES einer "fremden" Unit
Thema durchsuchen
Ansicht
Themen-Optionen

Exportieren eines TYPES einer "fremden" Unit

Ein Thema von sundance · begonnen am 14. Nov 2012 · letzter Beitrag vom 15. Nov 2012
Antwort Antwort
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#1

Exportieren eines TYPES einer "fremden" Unit

  Alt 14. Nov 2012, 18:56
Delphi-Version: 7
Hallo zusammen,

bitte entschuldigt den merkwürdigen Titel; mir wollte einfach kein besserer einfallen...

Es geht um Folgendes:
Für meine Bedürfnisse an "Dateisuche" habe ich mich für die Klasse "TFindFile" von DelphiArea entschieden. Kann einfach alles, was man sich so wünscht.
Für einfache Aufgaben wollte ich nun die Klasse ableiten, sodass z.B. ein Stringliste mit den Ergebnissen gefüllt wird, also:
Delphi-Quellcode:
  TFindFileListBasic = class(FindFile.TFindFile)
  private
    SL: TStringList;
    FStoreFullname: Boolean;
    FTotalFileSize: Int64;
    procedure OnFileMatchEvent(Sender: TObject; const FileInfo: TFileDetails);
  public
    constructor Create(AOwner: TComponent);
    destructor Destroy; override;
    function SearchForFiles: TStringList;
  published
    property StoreFullName: Boolean read FStoreFullname write FStoreFullname;
    property FileSizeOfList: Int64 read FTotalFileSize;
  end;
Der Aufruf sieht dann etwa so aus, um alle Verzeichnisse im Root von C: zu finden:
Delphi-Quellcode:
    var folderList: TStringList;

    with TFindFileListBasic.Create(Self) do begin
      Criteria.Files.Location := 'C:\';
      Criteria.Files.Subfolders := false; // Nur auf oberster Ebene suchen
      Criteria.Attributes.Directory := fsSet; // Nur Verzeichnisse suchen
      folderList := SearchForFiles; // Verzeichnisliste erstellen
      .
      .
      Free;
    end;
Mein Problem ist das Element fsSet, welches als Aufzählungstyp in der Original-Unit FileFind deklariert ist:
  TFileAttributeStatus = (fsIgnore, fsSet, fsUnset, fsAnySet, fsAnyUnset); Nur wegen dieses Typs muss ich (neben meiner Unit mit der abgeleiteten Klasse) auch noch die Original-Unit einbinden. Meine Versuche, das zu umgehen, sind leider gescheitert: Keine der beiden folgenden Zeilen in meiner Unit führen zum Erfolg:
Delphi-Quellcode:
  TFileAttributeStatus = FindFile.TFileAttributeStatus;
  // Fehler: Undeclared Identifier: 'fsSet'

  TFileAttributeStatus = (fsIgnore, fsSet, fsUnset, fsAnySet, fsAnyUnset);
  // Fehler: Incompatible types
Hat jemand eine Idee, wie ich in meiner Unit dieses Type "TFileAttributeStatus" bereitstellen kann, ohne in der Applikation die Unit "FileFind" einzubinden?

P.S. Klar, das ist nur Kosmetik. Mich würde nur interessieren, wie/ob man sowas machen kann, also einen Typ aus einer Unit übernehmen und exportieren...
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Exportieren eines TYPES einer "fremden" Unit

  Alt 14. Nov 2012, 19:07
Du könntest die Aufzählung nochmal selbst definieren und dann entweder (hart) explizit casten (Aufpassen, dass die Werte dieselben sind!) oder dir in Funktion zur "Übersetzung" schreiben (möglicherweise langsamer).

Vielleicht löst ja auch ein Subrange-Typ dein Problem (nicht getestet):
type TFileAttributeStatus = fsIgnore..fsAnyUnset;
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Exportieren eines TYPES einer "fremden" Unit

  Alt 14. Nov 2012, 20:39
Du solltest auch die Werte deines Enums exportieren ... jeden einzeln

Tipp: Schau mal in meine Variante der Hier im Forum suchenTNT-Unicode-Controls ... da hatte ich sowas exzessiv eingesetzt.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von sundance
sundance

Registriert seit: 9. Mai 2006
98 Beiträge
 
Delphi 7 Professional
 
#4

AW: Exportieren eines TYPES einer "fremden" Unit

  Alt 14. Nov 2012, 22:51
@BUG:
Code:
type TFileAttributeStatus = fsIgnore..fsAnyUnset;
funktioniert leider auch nicht...

@himitsu:
Meinst du sowas in der Art?

Code:
{ Meine Unit }
const
  fsIgnore = FindFile.fsIgnore;
  fsSet   = FindFile.fsSet;
  .
  .
Das funktioniert nämlich...

Trotzdem schade, dass man nicht den ganzen TYPE so einfach exportieren kann...

Vielen Dank an alle
.sundance.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Exportieren eines TYPES einer "fremden" Unit

  Alt 15. Nov 2012, 02:57
Nja, eigentlich exportiert man ja nicht den Typen, sondern legt ein Alias an.

type
OtherByte = Byte; // Alias (in selbiger oder anderer Unit)
Byte = System.Byte; // gleichnamiger Alias in anderer Unit
TMyByte = type Byte; // neuer Type

Indirekt kann man schon den ganzen Typ exportieren.

Neuerdings kann man (und ist auch, bei vielen RTL/VCL-Enums, auf die fieße Idee gekommen das zu nutzen)...
{$SCOPEDEUNMS ON}

Damit kann man den Enum nur noch mit Scope (Namespace) nutzen und schon braucht man die einzelnen Werte nicht mehr einzeln rüberzuholen.

Delphi-Quellcode:
type
  TFoo = (A, B, Foo);
  {$SCOPEDENUMS ON}
  TBar = (A, B, Bar);
  {$SCOPEDENUMS OFF}

begin
  WriteLn(Integer(Foo));
  WriteLn(Integer(A)); // TFoo.A
  WriteLn(Integer(TBar.B));
  WriteLn(Integer(TBar.Bar));
  WriteLn(Integer(Bar)); // Fehler
end;
$2B or not $2B
  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 14:11 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