![]() |
MemoBox bzw. Textdatei im Speicher verwalten
Hallo,
ich habe ein Programm geschrieben bei dem ich eine Textdatei in eine MemoBox auslese. Die Daten in der MemoBox kann ich schön schnell verarbeiten weil sie bereits im Speicher sind. Jetzt möchte ich mein Programm Formlos gestalten und kann dann keine MemoBox verwenden. Kann mir jemand sagen wie ich Speicher deklariere den ich wie eine MemoBox verarbeiten kann ? Auszug aus meinem Code (100 Werte lesen aus Registry):
Delphi-Quellcode:
kuba
procedure 100WerteMinimize;
var zaehler :integer; Registry: tRegistry; value :string; h :hwnd; begin for zaehler := 0 to 100 + 1 do begin Registry := tRegistry.Create; Try Registry.RootKey := HKEY_LOCAL_MACHINE;; Registry.OpenKey ('\Software\KUBA\100Werte', False); Value := Registry.ReadString (IntToStr(zaehler)); Registry.CloseKey; Finally Registry.Free; End; PostMessage(GetWindowHandleByExeName(Value), WM_SYSCOMMAND,SC_MINIMIZE,0); end; end; PS: ich habe das Programm schon Formlos und schreibe 100 Werte einfach in die Registry, das dauert jedoch zu lange weil ich die Werte ständig verarbeite (prüfe) ... |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Stringlist
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
Mal konkret - Ich hab die Daten in eine MemoBox eingegeben und von dort aus in die Registry geschrieben. Jetzt suche ich eine Möglichkeit die Daten von der Registry in den Speicher zu laden. So portiere ich die Daten von der MemoBox in die Registry:
Delphi-Quellcode:
Die andere Routine (ganz oben) verwende ich zur Verarbeitung der Daten (Minimize).
procedure TForm2.Button3Click(Sender: TObject);
var zaehler :integer; Registry: tRegistry; begin for zaehler := 0 to 100 + 1 do begin Registry := tRegistry.Create; Try Registry.RootKey := HKEY_LOCAL_MACHINE;; Registry.OpenKey ('\Software\KUBA\Minimize', False); Registry.WriteString (IntToStr(zaehler),Memo1.Lines.Strings[zaehler]); Registry.CloseKey; Finally Registry.Free; End; end; Form2.Close; end; Kann mir jemand einen Tip geben wie ich das mit Stringlist einfach lösen kann ? KUBA |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Memo.Lines ist eine Stringliste
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
kuba |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Naja deklariere dir eine Variable vom Typt TStringList.
Dann noch erstellen und du kannst alles machen was du willst. Am Ende das Freigeben nicht vergessen. |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Ja dann nimm eine StringListe statt Memo.Lines
Delphi-Quellcode:
var
sl: TStrings; ... sl := TStringList.Create; ... Registry.WriteString (IntToStr(zaehler),sl[zaehler]); |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Ja, eine StringListe.
;) Zum fünften mal... :stupid: Oder dann doch ein Array of String. :gruebel: :stupid: :wink: |
Re: MemoBox bzw. Textdatei im Speicher verwalten
[OT]Warum deklarieren hier alle etwas besseren Delphi-Programmierer eine StringListe nur als TStrings? Bringt das was oder ist das wirklich einfach nur kürzer? :mrgreen: [/OT]
Zitat:
Delphi-Quellcode:
:wink:
sl.Free;
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
Gruß K-H |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
Im Moment sehe ich nur den Sinn, dass TStrings einfach weniger zu schreiben ist. ;) Klärt mich auf wenn ich falsch liege. :) |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Z.B. TMemo.Lines sind als TStrings deklariert und nicht als TStringList. Deklarierst Du also einen Übergabeparameter als TStringlist, kannst Du TMemo.Lines nicht mehr übergeben, so einfach ist das ;)
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Hallo,
da muß ich nun doch wiedersprechen.
Delphi-Quellcode:
Wenn man die StringList sortieren will, oder sonst etwas nutzen will was in TStrings enthalten ist, dann knallt's.
var
ll : tstrings; begin ll:=tstringlist.Create; ll.add('einms'); ll.add('zwei'); ll.add('dreir'); ll.add('vier'); ll.add('fünf'); ll.sort; {---- das geht nicht!} ll.Free; end; Und die Übergabe geht über .Text ganz gut. Gruß K-H |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Und was willst Du damit zum Ausdruck bringen (vor allem, wem widersprichst Du denn da nun)?
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
Delphi-Quellcode:
würde das dann auch wieder gehen :)
TStringList(l1).sort;
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Ist zwar in diesem Fall wurscht, aber IMO wäre es besser mit
Delphi-Quellcode:
(ll as TStringList).sort;
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Hallo
ich hatte den Eindruck, das sich Kuba mit den Stringlisten ein wenig schwer tut, und dann ist eine eine solche Konstruktion meiner Meinung nach nicht das wahre:
Delphi-Quellcode:
Wenn dann irgendwo hinten im Code eine Methode oder eine Eigenschaft von TStringlist genutzt wird, ist Hängen im Schacht. Wenn man nur die Methoden und Eigenschaften von TStrings benötigt, und man ist sich dessen bewusst, ist dies ein gangbarer Weg. Aber dann sollte man nicht von Stringlisten sondern von "deabstrahiertem" (oder wie ach immer das heißt) TStrings sprechen.
var
sl : TStrings; sl:=TStringlist.create; Und daß
Delphi-Quellcode:
funktioniert, wußte ich nicht. TStringlist(ll).sort Typecasting mit Klassen eröffnet ganz neue Möglichkeiten. Gruß K-H |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Der harte Cast sollte aber, wie Detlef schon erwähnt hat, durch eine Softcast ersetzt werden.
Die Verwendung des abtrakten Vorgängers bei der Variablendeklaration hat weiterhin den Vorteil, dass man später die implementierende lasse einfacher ändern kann. Deshalb wird innerhalb der VCL auch immer TStrings als Typ verwendet. |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Zitat:
in diesem fall weiß ich doch 100%ig von welchem typ mein objekt ist und, dass ich das garantiert zu TStringList casten kann. |
Re: MemoBox bzw. Textdatei im Speicher verwalten
Ich würde grundsätzlich Fehlerquellen umgehen. In diesem Beispiel ist es sicherlich klar, aber Code wächst und irgendwann ist es nicht mehr so ganz klar. Und eine aussagekräftige Fehlermeldung wg dem ungültigen Cast sagt mehr aus als eine Zugriffsverletzung.
|
Re: MemoBox bzw. Textdatei im Speicher verwalten
Wow, den ganzen Morgen habe ich herumgesucht und nix gefunden...
Kaum bin ich ein paar Stunden weg, prasseln die Antworten nur so herunter. Vielen Dank für die Aufklärung !! Die angeführten Beispiele bringen mich mit Sicherheit weiter :zwinker: KUBA PS: habe meine Software schon fertig, ist aber zu langsam - muss ich nochmal überarbeiten... Und wie ich jetzt gerade anfange stelle ich fest dass es viel Arbeit ist :roteyes: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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