![]() |
Eigener Dateityp - aber WIE?
Hallo zusammen. Immer öfter fällt mir auf, d.h. ich lese im Forum oder wo anders, dass man sich zu dem und dem Zweck einfach einen eigene Dateityp überlegen soll. Das hört sich so leicht an, aber ich kann mir nicht vorstellen, dass zu einem eigenen Dateiformat nur das Ändern der Endung gehört. Wenn ich in eine Datei einfach was schreibe, diese dann abspeichere (z.b. mit der Endung *.mf = MeinFormat), und die dann im Texteditor öffne, ist es das gleiche, als ob ich eine Textdatei öffne. Aber eigentlich soll doch ein eigener Datentyp nur mit dem eigenen Programm (order kompatiblen) geöffnet werden können. Also, wie würdet ihr einen neuen/eigenen Datetyp definieren, bzw. erzeugen?
Bis bald, man liest sich. Stanlay :hi: |
Such mal im Forum nach Registry und Datei - dazu gibt es schon mehrere Threads. Um einen Dateityp mit Deinem Programm zu verknüpfen müssen die entsprechenden Einträge in der Registry im Schlüssel HKCR vorgenommen werden.
...:cat:... |
Hallo Stanley,
Es kommt schon darauf an, ob Du Deine Daten im Binär- oder Textformat abspeicherst. Beide Formate kannst Du ohne Weiteres mit Deinem oder kompatibelen Programmen auslesen. Ziel einer exklusiven Erweiterung ist es, eine Datei und dessen Inhalt auf einen Blick erkennen und einem Programm zuordnen zu können. Solltest Du Dein Programm vermarkten wollen, dann ist es im wirtschaftlichen Sinne ratsam, Deine Daten binär zu speichern. Ein passendes Beispiel wäre zum Beispiel das PDF oder Word (DOC) Format. Hier ist das kaum zu entschlüsselnde Binärformat sicherlich im Interesse der Hersteller gewesen, um daraus Profit zu erzielen. Man sollte also abwiegen, ob man die Daten mit einem herkömmlichen Texteditor ändern (z.B. XML, INI, RTF, HTML), was ziemlich komfortabel aber fehleranfällig ist, oder die Daten exklusiv mit Deinem Programm bearbeiten soll. Das Binärformat sollte man unbedingt dann verwenden, wenn die Daten schützenswert sind. (z.B. Passwörter, EMails, usw.) Gruß, Tom |
Hi,
@Specialwork: Versteh das nich so richtig. Wie meinst du das mit "binär" abspeichern? Wandelst du irgendwie all deine Daten in integer- Werte um, rechnest sie dann in einen Binären code um und speicherst diesen dann als Text ab oder wie? Ich mach das mit eigenen Dateitypen meistens so: Erstmal gucke ich was ich in meinem Programm für einen Datentyp brauche, den ich verwalten muss bzw. welches Format die Daten haben sollten die ich verwalten muss. Dann deklrarier ich mir einen Typ, z.B. für eine Adressverwaltung:
Delphi-Quellcode:
Ok, in dem Beispiel sieht man jetz nich wirklich den Sinn von eigenen Typen, weil ich für all diese Daten eigentlich nur Strings brauche, aber so könnte das z.B. aussehen.
type
adresstyp = record name, strasse, ort: string; hausnr, tel, fax: integer; end; Dann kann ich irgendeine Variable deklarieren, die dieesen Typ hat; bei Adressverwaltungen solltes dann aber schon ein Array sein:
Delphi-Quellcode:
Ne Wertezuweisung kann dann so aussehen:
adressen: array[0..99] of adresstyp;
Delphi-Quellcode:
So, aber jetz kommt eigentlich ers das für dich eher wesentliche.
adressen[0].name= 'S - tefano';
Naja, oder auch nicht. Denn den Typ haben wir ja oben schon deklariert, und wir können auch einen Array erzeugen und ihn mit Daten füllen. Diese Daten sind dann schon so "formatiert" wie wir es oben haben wollten. Wir haben also quasi schon fast ne Datei, aber noch isses nur n Array der diesen Typ hat, den wir noch abspeichern müssen. Sowas geht dann (so mach ich es jedenfalls) mit Files.
Delphi-Quellcode:
Hm, irgendwas hab ich bestimmt falsch gemacht, weil lange nich mehr sowas gemacht, aber das is eigentlich alles was du für ein eigenes Dateiformat brauchst.
procedure abspeichern;
var f: file of adresstyp;{die Variable steht im Programm stellvertretend für ne Datei} i: integer;{Schleifenzähler der gleichzeitig Index im Array angibt} begin assignfile(f, 'dateiname.adr'); {der Variable f einen Dateinamen zuweisen} {$I-} {Compilerschalter, weiß nich mehr warum der sein muss, aber ich bin mir ziemlich sicher dass der muss... :lol: } reset(f); if ioresult= 0 then begin {wenn kein Fehleraufgetreten is, dann...} for i:= 0 to arlength do begin {arlength soll der Index des letzten Eintrags im Array ein} write(f, adressen[i]); {in der Schleife werden die einzelnen Datensätze des Arrays in die Datei geschrieben, sind ja nur aneinandergereihte Variablen} end; closefile(f); {Datei wieder schließen, um anderen Programmen den Zugriff zu ermöglichen} {$I+} end; end; OK, auslesen solcher Dateien wär ja auch nich schlecht, aber dazu bin ich jetz mittlerweile doch schon zu müüüde... Hoffe mal dass es überhaupt das war was du wissen wolltest... Bis dann, S - tefano |
Vielen Dank. Es ist auf jeden Fall interessant. Ich muss mir das alles jetzt noch mal durchlesen. Bis dann man liest sich. Stanlay :coder:
|
![]()
Delphi-Quellcode:
von Johannes Tränkle
uses Registry;
... function InstallExt(Extension, ExtDescription, FileDescription, OpenWith, ParamString: String; IconIndex: Integer): Boolean; var Reg: TRegistry; begin Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey(Extension, True); WriteString('', ExtDescription); OpenKey('\' + ExtDescription, True); WriteString('', FileDescription); OpenKey('DefaultIcon', True); WriteString('', OpenWith + ','+IntToStr(IconIndex)); OpenKey('\' + ExtDescription + '\Shell\Open\Command', True); WriteString('', '"' + OpenWith + '" "' + ParamString + '"'); end; Result := True; except Result := False; end; Reg.Free; end; function UnInstallExt(Extension, ExtDescription: String): Boolean; var Reg: TRegistry; begin Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; DeleteKey(Extension); DeleteKey('\' + ExtDescription); end; Result := True; except Result := False; end; Reg.Free; end; ... InstallExt('.xyz', 'XYZ Datei', 'Tolles Programm', Application.ExeName, '%1',0); UnInstallExt('.xyz', 'XYZ Datei'); *** Gruss Mirilin |
:hello: Suppi. Vielen Dank. Stanlay :hello: :hello: :hello:
|
Binärformat
Hallo S - tefano
Es gibt zwei gängige Methoden, Daten in einer Datei abzulegen a) ASCII Format (z.B.: Texte) b) Binärformat (z.B.: Klassen, Arrays) Gruß, Tom |
Hi,
ahso, also is mein obiges Beispiel im Binärformat. Und auch thx @ Mirilin, sowas hab ich noch gesucht. Bis dann, S - tefano |
Re: Eigener Dateityp - aber WIE?
Ich habe eben mal in der Suche nach einem Post zum erstellen eines eigenen Dateityps gesucht.
Bin natürlich auch fündig geworden. :-D Jetzt habe ich sofort den Code von Mirilin ausprobiert - klappt, bis auf eine Kleinigkeit : Wenn ich einen dateityp entfernen will, passiert dies zwar, aber in der Registry steht er trotzdem noch, man kann ihn allerdings nicht öffnen(er ist leer). Aslo muss man ihn manuell entfernen. -------> warum? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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 by Thomas Breitkreuz