AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hint aus ini Datei laden (mehrzeilig)

Ein Thema von Satyr · begonnen am 6. Dez 2014 · letzter Beitrag vom 6. Dez 2014
Antwort Antwort
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 16:04
Huhu,

ich habe eine Anwendung die für verschiedene Fälle verschiedene Hints anzeigen soll. Diese habe ich in eine ini Datei gespeichert. Also:

Code:
[Komponente1]
hint=text

[Komponente2]
hint=text

[Komponente3]
hint=text
Laden möchte ich die Hints dann folgendermaßen:

Delphi-Quellcode:
for I := 1 to 10 do
begin
 TAdvOfficeImage(FindComponent('ring'+inttostr(i))).Hint := ini.ReadString('ring'+inttostr(i), 'hint', '');
end;
Das funktioniert im grunde auch so wie es soll, bis auf eine Sache: Die Hints werden nicht mehrzeilig geladen. Wenn ich im Objektinspektor ein Hint so definiere:

- Punkt 1
- Punkt 2
- Punkt 3

dann werden diese Punkte auch untereinander angezeigt. Aus der ini Datei geladen, fehlt der Break. Also habe ich an entsprechenden Stellen in der ini Datei ein #13#10 gesetzt. Ohne Erfolg, wie Ihr wahrscheinlich schon vermutet. Das #13#10 wird als Teil des zu ladenden Strings gesehen und auch so angezeigt, nicht als Steuerzeichen.

Gibt es eine unkomplizierte Möglichkeit das zu lösen? Ich könnte natürlich per Hand die Hints zurechtrücken. Für alle Komponenten wäre das aber recht aufwändig und das automatische laden aus der ini nicht mehr voll gegeben.

Gruß,
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 16:22
Delphi-Quellcode:
function EncodeMultiLineString(const Value: string): string;
var
  lst: TStringList;
begin
  lst := TStringList.Create;
  try
    lst.StrictDelimiter := true;
    lst.Text := Value;
    result := lst.CommaText;
  finally
    lst.Free;
  end;
end;

function DecodeMultiLineString(const Value: string): string;
var
  lst: TStringList;
begin
  lst := TStringList.Create;
  try
    lst.StrictDelimiter := true;
    lst.CommaText := Value;
    result := lst.Text;
  finally
    lst.Free;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 16:37
An sowas in der art dachte ich schon. Nur muss das Programm dann die decodierten einzelstrings für den hint wieder neu zusammenbauen, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 16:43
An sowas in der art dachte ich schon. Nur muss das Programm dann die decodierten einzelstrings für den hint wieder neu zusammenbauen, oder?
Nein! Du kannst direkt schreiben (<Control> sinngemäß ersetzen):

Delphi-Quellcode:
ini.WriteString('ring'+inttostr(i), 'hint', EncodeMultiLineString(<Control>.Hint)));

...

<Control>.Hint := DecodeMultiLineString(ini.ReadString('ring'+inttostr(i), 'hint', ''));
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 16:48
Ah, verstehe. Vorher also auch neu abspeichern.
Ich werds gleich (nach dem Abendessen *g*) versuchen. Vielen Dank schon mal .
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Hint aus ini Datei laden (mehrzeilig)

  Alt 6. Dez 2014, 17:34
Nur um das nochmal genau zu erklären:

In einer INI werden die Zeilenumbrüche zum Trennen der einzelnen Werte benutzt, also ist es nicht möglich Zeilenumbrüche innerhalb einzelner Werte zu verwenden.
Genauso, wie es nicht möglich ist, in den Value-Namen das "=" zu benutzen.

Lösungen:
  • Den gewünschten Text auf mehere Werte auteilen.
    Entweder mit zusätzlicher Zeilenangabe, damit man weiß wieviel man auslesen muß
    oder man liest, bis es nichts mehr zum Lesen gibt (hint4).
  • Die "ungültigen" Zeichen durch gültige Zeichen/Zeichenfolgen ersetzen.
  • Ein anderes Dateiformat benutzen, welches das gewünschte Feature bietet.


z.B.
Code:
[Komponente1]
hint1=Zeile 1
hint2=Zeile 2
hint3=Zeile 3

[Komponente1]
HintZeilen=3
hint1=Zeile 1
hint2=Zeile 2
hint3=Zeile 3

[Komponente1]
hint=Zeile 1,Zeile 2,Zeile 3

[Komponente1]
hint=Zeile 1<br>Zeile 2<br>Zeile 3
Ein Therapeut entspricht 1024 Gigapeut.
  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 01:13 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