AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Ini ohne IniFiles Project (WinApi)
Thema durchsuchen
Ansicht
Themen-Optionen

Ini ohne IniFiles Project (WinApi)

Ein Thema von KodeZwerg · begonnen am 27. Aug 2020 · letzter Beitrag vom 2. Sep 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

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

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 09:02
[EDIT] Ohh, wo kommen denn die ganzen Antworten her ... dschudlsche, dass NonVCL nochmal erwähnt wird.[/EDIT]

NonVCL bedeutet aber nicht unbedingt NonRTL.

OK, wenn es wirklich nur die Windows-Unit nutzen soll, dann kann man auch direkt auf WinAPI aufbauen (auch das LowerCase ist da vorhanden)
aber gerade auf die grundlegensten und im Normalfall extrem häufig verwendeten Units der RTL zu verzichten .... hmmmm.
Werden die dann doch eigentlich immer irgendwo benutzt, dann ist es den Aufwand eigentlich nicht Wert.
Vor allem auf die SysUtils möchte ich niemals verzichten, oder bastelst du dir eine Exception-Behandlung selbst?


Warum gibt ReadInteger einen Cardinal zurück?

Wozu der Default '' im CreateFile, wenn FileName unbedingt nötig ist?
Auch bei Section und Ident muß man was angeben, sonst isses ja sinnlos.
[edit] außer beim ReadString ... mit etwas Anpassung bekommt man bei leerem Section/Ident (nil) die Liste der Sections zurück.

Den Sinn von _LowerCase hab ich nicht verstanden, da eh nur für für Boolean genutzt wird.
Delphi-Referenz durchsuchenSameText oder Delphi-Referenz durchsuchenCompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, ...)

_FileExists ist auch unnötig, da GetPrivateProfileString das bereits beachtet ... erspart auch die doppelte Behandlung des Default.

Und da nun nichts mehr übrig ist ... weg mit dem Objekt
Delphi-Quellcode:
type
  TkzIni = record // hier gibt es nicht freizugeben ... keine Handles, nur ein gemagagter Typ, also kann man hier die Automatik nutzen
  private
    FFileName: string;
  public
    class function Create(const FileName: string): TkzIni; static;
    function ReadString (const Section, Ident: string; const Default: string = ''): string;
    function WriteString (const Section, Ident: string; const Value: string = ''): Boolean;
    function ReadInteger (const Section, Ident: string; const Default: Integer = 0): Cardinal; // wenn man schon überall leer '' als Default nimmt ... dann hier auch, oder nicht?
    function WriteInteger(const Section, Ident: string; const Value: Integer = 0): Boolean;
    function ReadBoolean (const Section, Ident: string; const Default: Boolean = False): Boolean;
    function WriteBoolean(const Section, Ident: string; const Value: Boolean = False): Boolean;
  end;
Beim Write kann man sich überlegen das über eine Exeption regeln zu lassen.
Ich kenne fast niemanden, der bei sowas die Rückgabewerte prüft, also dan besser automatisch prüfen lassen.
Ungültige Pfade und fehlende Schreibrechte sind ja keine unwichtige Sache. Randvoller, Datenträger auch nicht, aber das sollte kaum noch vorkommen. (und wenn doch, dann hat man größere Probleme)

Am Ende ist es sowieso inkonsistent, denn wenn man beim Lesen keine Fehler prüft, kann man es beim Schreiben auch weglassen. (oder andersrum)

Delphi-Quellcode:
function TkzIni.ReadString(const Section, Ident, Default: string): string;
const
  MaxLength: Cardinal = 1024;
begin
  SetLength(Result, MaxLength);
  SetLength(Result, GetPrivateProfileString(PChar(Section), PChar(Ident), PChar(Default), PChar(Result), MaxLength + 1, PChar(FFileName)); // +1 für abschließende #0
end;

function TkzIni.ReadString(const Section, Ident, Default: string): string;
begin
  SetLength(Result, 1024);
  SetLength(Result, GetPrivateProfileString(PChar(Section), PChar(Ident), PChar(Default), PChar(Result), Length(Result) + 1, PChar(FFileName)); // +1 für abschließende #0
end;

PS: Und sooooooooooo groß ist es nicht (da sind andere Dinge schlimmer)
TIniFile ist auch WinAPI, aber auf anderen Plattformen wird es transparent durch TMemIniFile ersetzt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Aug 2020 um 09:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 09:13
zumindest geh ich kurz auf diesen Punkt ein:
Warum gibt ReadInteger einen Cardinal zurück?
Weil das die WinApi so macht. Sie returned einen Cardinal/UINT.

Danke für den Record Vorschlag!
Wie gesagt, das ist gestern Nacht innerhalb von ein paar Minuten nur per Notepad und Windows SDK entstanden.
Etwaige Fehler oder Prüfung ob Code überhaupt ausführbar ist steht mir noch bevor.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 09:16
Etwaige Fehler oder Prüfung ob Code überhaupt ausführbar ist steht mir noch bevor.
Dann muss die Frage erlaubt sein, warum Du ihn in diesem Zustand überhaupt veröffentlichst ... ?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 09:21
Immerhin kompiliert das (XE 10.2).

Das Destroy braucht ein override; anstatt ein overload; !
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 09:51
Dann muss die Frage erlaubt sein, warum Du ihn in diesem Zustand überhaupt veröffentlichst ... ?
Klar sind Fragen jeder Art erlaubt, mein Hauptpost sagts doch eigentlich schon.
Zitat:
Status: Alpha (nur per Notepad erstellt, noch ungetestet)

Hier stelle ich Euch schonmal meine Grundidee vor
Falls das noch zu ungenau ist, vielleicht so:
Ich sammel auf diese Weise eindrücke bzw verbessere alles nach Kritik oder stampfe Projekt ein.
himitsu's record zBsp = mega! Darauf bin ich Nachts nicht gekommen.

Cool das es kompiliert @TiGü und Danke für's durchlaufen lassen! Klar Override nicht Overload *schäm*
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 10:08
Das
Code:
case s[i] of
  'A'..'Z','Ä','Ö','Ü':
       Result[i] := CHR(Byte(s[i]) + 32);
funktioniert in Unicode-Zeiten doch nicht mehr für die Umlaute?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 10:21
@TigerLilly: die kleinen _helfer fliegen zu morgen raus. alles wird intern auf string umgestellt (integer bool etc), leichtere Handhabung und readinteger kann dann auch integer returnen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ini ohne IniFiles Project (WinApi)

  Alt 27. Aug 2020, 11:42
Bin ich jetzt der Einzige der mal hinterfragt wie Kompatibel das Ganze ist ?
https://stackoverflow.com/questions/...m-kernel32-dll

Das ist doch meiner Meinung nach für Win-10 gar nicht mehr aktuell,
oder irre ich mich da ?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Ini ohne IniFiles Project (WinApi)

  Alt 31. Aug 2020, 07:54
    class function Create(const FileName: string): TkzIni; static;
Das habe ich krampfhaft versucht einzubauen, leider ohne Erfolg, ich hoffe 'ne property reicht dafür auch aus
Der jammerte immer das ich keinen Zugriff auf meine FFileName variable habe.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Ini ohne IniFiles Project (WinApi)

  Alt 31. Aug 2020, 08:40
Klar, geht auch.

Und ups, hast natürlich auf Self.FFileName keinen Zugruff, denn Self gibt es hier nicht.
aber Result.FFileName := FileName; .
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19: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