![]() |
200+ Texte in ein memo laden
Hallo!
Ich code ein geographielernprogramm. Ich möchte wenn ein jeweiliges land auf der karte angewählt ist, den dazugehörigen text (hauptstadt, länderspezifische informationen etc) in einem memo anzeigen. die texte zu jedem land hab ich schon in über 200 txt dateien abgespeichert... wenn ich nicht 200+ memos erstellen will und die txt dateien dem user nicht zur verfügung stellen will( via loadfromfile) wie binde ich diese ein? wenn ich nicht recht irre nutzt eine .res file auch nur quellen oder? am liebsten wäre es mir, ich könnte alle 200 texte in eine dll laden und auf diese zugreifen, dann müsste ich nur die exe und die dll bereitstellen, lässt sich das machen? wenn ja ne idee wie? bin für alle vorschläge offen, wie würdet ihr das problem lösen haufenweise texte in nur einem memo darzustellen? dank!! lg aus hamburg robin |
AW: 200+ Texte in ein memo laden
Wenn du alle benötigten Dateien zipst, mußt du nur ein Zip-File übergeben ...
Was spricht dagegen, mit Text-Dateien zu arbeiten? Du benennst die Textdateien nach dem Land (z.B. Deutschland.txt) und lädst die nach Bedarf mit LoadFromFile in dein Memo. Du könntest aber auch eine Datenbank einsetzen, wenn du nicht willst, daß der Anwender die Texte manipulieren kann. Eine DLL zu verwenden halte ich für unnötig und zudem für zu kompliziert, vor allem, wenn du Korrekturen an den Texten vornehmen mußt. |
AW: 200+ Texte in ein memo laden
Mein Vorschlag wäre hier eine Datenbank (z.B. SQLite) zu nehmen, wie mein Vorredner es schon vorgeschlagen hat oder die Texte in eine Resources packen und dann die Resources entweder ins Programm oder doch in eine DLL. So brauchst Du bei der Resources nur die DLL oder die EXE auszutauschen, wenn Du Änderungen vornimmst.
|
AW: 200+ Texte in ein memo laden
Hi,
der Weg über Datenbank ist sicher der bessere. Aber es ist auch relativ easy mit einer DLL machbar. Eine Datei z.B. laender.rc dort für jede Textdatei eine Zeile: TEXT_DE RCDATA "deutschland.txt" Eine dpr:
Delphi-Quellcode:
kompilieren:
library land_data;
{$R *.res} begin end. brcc32.exe laender.rc dcc32 land_data.dpr In den Sourcen:
Delphi-Quellcode:
Aufruf z.B.
procedure DeinForm.LadeMemo(ABlockName: string);
Var AStream: TResourceStream; AHandle: THandle; ADllFileName: string; begin ADllFileName := 'land_data.dll'; AHandle := LoadLibraryEx(PChar(ADllFileName), 0, LOAD_LIBRARY_AS_DATAFILE); if AHandle > HINSTANCE_ERROR then begin try AStream := TResourceStream.Create(AHandle, ABlockName, RT_RCDATA); try if AStream.Size > 0 then begin AStream.Position := 0; DeinMemo.LoadFromStream(AStrem); end; finally AStream.Free; end; finally FreeLibrary(AHandle); end; end else // { TODO : Fehlerausgabe } end; LadeMemo('TEXT_DE'); Alles ungetestet... Frank |
AW: 200+ Texte in ein memo laden
Moin Moin Robin,
denke dein Programm sollte einigermassen robust sein, somit würde ich vor der Verwendung von +200 Textdateien Abstand halten. Wenn Du die Texte nicht direkt in deine App integrieren möchtest und wohl noch weitere Infos dazu kommen, bleiben prinzipiell die folgenden Möglichkeiten über:
Für die Serialisierung noch kurz eine Erläuterung, du brauchst eine Objektstruktur für die Darstellung deiner Länder in deinen Programm. Diese rüstest du dann mit zwei Methoden aus, Save2Stream und ReadFromStream. In die App welche du auslieferst, nimmst du nur die Methode ReadFromStream auf. Dann baust du dir noch ein zweites Prog mit der selben Objektstruktur (eine gemeinsame Codebasis), welches du mit der Pflege der Daten betraust, diese schreibt dann über Save2Stream alle benötigten Daten in eine Datei (kannst binär, als XML, in eine DB oder wie auch immer) ausgeben. That's all. |
AW: 200+ Texte in ein memo laden
Ich würde die eine Textdatei wählen. Wobei natürlich eine gewisse Struktur genutzt werden sollte (z.b. xml).
Gruß K-H |
AW: 200+ Texte in ein memo laden
Sagen wir, deine Text-Datei sieht so aus:
Code:
Dann liest Du diese Datei in eine TStringList ein...
@@Deutschland
Hier ist der Text für die Bundesrepublik @@England Und hier für UK ..
Delphi-Quellcode:
Einen Beschreibungstext kannst Du so bekommen:
Var
MyCountryDescriptions : TStringList; ... MyCountryDescriptions.LoadFromFile('Laender.TXT');
Delphi-Quellcode:
Das wäre jetzt für Dich die einfachste Möglichkeit. So kannst Du die Datei auch jederzeit erweitern.
Procedure CopyCountryDescription(Const Country : String; Description : TStrings);
Var i : Integer; Begin Description.Clear; i:= MyCountryDescriptions.IndexOf('@@'+Country); if i=-1 then exit; // Keine Beschreibung gefunden inc(i); Description.BeginUpdate; Try while (i<MyCountryDescriptions.Count) do if Copy(MyCountrDescriptions[i],1,2) <> '@@' then break else begin Description.Add(MyCountrDescriptions[i]); inc(i); end finally Description.EndUpdate; end end; ... // Aufruf z.B. so CopyCountryDescription('Deutschland',Memo1.Lines); |
AW: 200+ Texte in ein memo laden
danke für die tipps!!
auch wenn ich die texte ungerne zur verfügung stelle, verstehe ich zuwenig von datenbanken bzw XML um das realistisch zu verwirklichen.. ich dein beispiel eben mal ausprobiert furtbichler, bin mir allerdings nicht sicher wo ich
Code:
einfügen muss? egal wo ich es probiere, ich kriege ne exception ("zugriffsverletzung bei adresse ....)
MyCountryDescriptions.LoadFromFile('C:\irgendeinpfad\land.TXT');
in dem moment wo diese zeile ausgelöst wirdm (ob auf buttondruck oder im formcreate). hast nen tip? robin |
AW: 200+ Texte in ein memo laden
Zitat:
Delphi-Quellcode:
MyCountryDescriptions := TStringList.Create;
Und nicht vergessen, die Stringliste am Ende wieder freizugeben:
Delphi-Quellcode:
FreeAndNil(MyCountryDescriptions);
|
AW: 200+ Texte in ein memo laden
gleiches problem :S
hier mal der ganze code. nur ein memo (memo1) und nen button auf der form..pfad ist auch korrekt und das land richtig in der txt benannt nach @@ :o
Code:
Hab create, loadfromfile und freigabe dem button übergeben ist das ok?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private MyCountryDescriptions : TStringList; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; MyCountryDescriptions : TStringList; implementation {$R *.dfm} Procedure CopyCountryDescription(Const Country : String; Description : TStrings); Var i : Integer; Begin Description.Clear; i:= MyCountryDescriptions.IndexOf('@@'+Country); if i=-1 then exit; // Keine Beschreibung gefunden inc(i); Description.BeginUpdate; Try while (i<MyCountryDescriptions.Count) do if Copy(MyCountryDescriptions[i],1,2) <> '@@' then break else begin Description.Add(MyCountryDescriptions[i]); inc(i); end finally Description.EndUpdate; end end; procedure TForm1.Button1Click(Sender: TObject); begin MyCountryDescriptions := TStringList.Create; MyCountryDescriptions.LoadFromFile('C:\MeinPfad\land.TXT'); CopyCountryDescription('Deutschland',Memo1.Lines); FreeAndNil(MyCountryDescriptions); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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