![]() |
TStrings[Memo] mit Variable steuern
jo mein programm nimmt immer mehr gestalt an.
jetzt stehe ich noch vor folgenden problem: beim ereignis ONCREATE wird eine textdatei in TMemo gelesen und die Items mit dem Inhalt (textfile) gelistet. desweiteren kann man mit einer TCheckbox eine TStringGrid bearbeiten. sobald man auf die checkbox clickt, werden sonderzeichen (wie standard '_' (entspricht const Search_Text = '_') eingestellt) gelöscht. damit die vielfalt dieser sonderzeichen erhöht wird (durch user), würde ich gerne über das oben angesprochene TMemo den inhalt der Items mit in die const Search_Text übernehmen. vom sinn her const Search_Text= lbfilter.items logisch dass das nicht so geht. aber kann mir da einer einen richtigen tipp geben? :cry: :roll: [edit=MrSpock]Titel auf Wunsch des Erstellers geändert. Mfg, MrSpock[/edit] |
Re: Konstantenzuweisung [von tmemo.items]
Ich bin mir noch nicht sicher, ob ich dein Problem richtig verstanden habe,
aber vielleicht hilft eine Instanz von TStringList weiter. Damit kannst du eine dynamische Anzahl von Strings speichern.
Delphi-Quellcode:
Typische Operationen mit einer Liste sind.
// Deklaration
var SonderZeichen : TStringList; ... initialization // Erzeugt das Objekt beim Programmstart. SonderZeichen := TStringList.Create; finalization // Gitb es kurz vor Programmende wieder frei. FreeAndNil(SonderZeichen); end; 1) Einfügen (SonderZeichen.Add) 2) Löschen (SonderZeichen.Delete) 3) Laden & Speichern (SonderZeichen.LoadFromFile & SonderZeichen.SaveToFile) Hoffe das hilft ?!? |
Re: Konstantenzuweisung [von tmemo.items]
kann man das nicht anders machen?
sobald ich Search_Text als Variable von TStringlist deklariere, spinnt meine anweisung: StringGridReplace(sgfiles,Search_text,' '); |
Re: Konstantenzuweisung [von tmemo.items]
Hilft das weiter?
Delphi-Quellcode:
Gruß,
for lk := 0 to Search_text.Count - 1 do begin
StringGridReplace(sgfiles, Search_text[lk], ' '); end; // for lk pszopp |
Re: Konstantenzuweisung [von tmemo.items]
danke das hilft mir erstmal.
Delphi-Quellcode:
funzt aber net richtig.
Search_Text := TStringList.Create;
Search_Text.Add(edfilter.text); lbfilter.Items.AddStrings(Search_Text); Search_Text.free; wenn man bei dem filter z.b. alben-dreams eingibt (was ja gelöscht werden soll) kommt eine fehlermeldung "zugriffsverletzung" |
Re: Konstantenzuweisung [von tmemo.items]
Wo genau tritt die Zugriffsverletzung denn auf?
Wieso reicht es nicht, wenn du die Filter nur in der Listbox speicherst? (Vielleicht kannst du ja ein bißchen mehr Code posten?) Gruß, pszopp |
Re: Konstantenzuweisung [von tmemo.items]
Liste der Anhänge anzeigen (Anzahl: 1)
hier kann man den filter hinzufügen:
Delphi-Quellcode:
und das ist der button "anwenden" für die erste checkbox...//Hinzufügen eines Neuen Filters procedure Tfmformat.baddClick(Sender: TObject); var counter,i:integer; begin if lbfilter.items.indexof (edfilter.text) > -1 then begin showmessage ('Redundanzproblem!'); edfilter.SetFocus; end else begin Search_Text := TStringList.Create; Search_Text.Add(edfilter.text); lbfilter.Items.AddStrings(Search_Text); Search_Text.free; end; lbfilter.Sorted:=true; edfilter.Clear; counter:= lbfilter.Items.Count; label2.caption:='(' + inttostr(counter) + ')'; if label2.caption ='(0)' then label2.caption:='()'; Statusbar1.Panels[0].text:='Geändert'; change:=true; end;
Delphi-Quellcode:
kann man überhaupt mit der variablen Search_Text in einer stringlist (tlistbox mit mehreren items) arbeiten?
...
//Sonderzeichen entfernen anhand von Search_Text in sgfiles.cells[0,i] if checkbox1.checked then if not(length(sgfiles.Cells[0,1])>1) then else begin for lk := 0 to Search_text.Count - 1 do begin StringGridReplace(sgfiles, Search_text[lk], ' '); end; //StringGridReplace(sgfiles,Search_text,' '); //StringGridReplace(sgfiles,Search_Text,''); Statusbar1.Panels[1].text:='Geändert'; change:=true; ... initialization // Erzeugt das Objekt beim Programmstart. SonderZeichen := TStringList.Create; finalization // Gitb es kurz vor Programmende wieder frei. FreeAndNil(SonderZeichen); end; end. hab gerad gemerkt das die fehlermeldung (anhang, runtime fehlermedlung) immer im zusammenhang bei formclose oder eben man den filter andwenden will (also Search_text wird verwendet) kommt, bloß schlimmes steht da nicht drin. nur ein messagedlg ob speichern ja oder nein. |
Re: Konstantenzuweisung [von tmemo.items]
Wie sieht es denn damit aus?
Delphi-Quellcode:
Hilft dir das???
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ComCtrls; type TForm1 = class(TForm) lbFilter: TListBox; edFilter: TEdit; Label2: TLabel; StatusBar1: TStatusBar; BtnAdd: TButton; procedure BtnAddClick(Sender: TObject); private Changed : Boolean; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BtnAddClick(Sender: TObject); var counter,i : Integer; NewItem : string; begin NewItem := edFilter.Text; if lbfilter.items.indexof (NewItem) > -1 then begin showmessage ('Redundanzproblem!'); edfilter.SetFocus; end else begin lbfilter.Items.Add(NewItem); end; lbfilter.Sorted := true; edfilter.Clear; counter := lbfilter.Items.Count; label2.caption:='(' + inttostr(counter) + ')'; if (label2.caption ='(0)') then label2.caption:='()'; Statusbar1.Panels[0].text:='Geändert'; Changed := true; end; ... //Sonderzeichen entfernen anhand von Search_Text in sgfiles.cells[0,i] if checkbox1.checked then begin if (length(sgfiles.Cells[0,1])>1) then begin for lk := 0 to lbFilters.Items.Count - 1 do begin StringGridReplace(sgfiles, lbFilters.Items[lk], ' '); end; // for lk //StringGridReplace(sgfiles,Search_text,' '); //StringGridReplace(sgfiles,Search_Text,''); Statusbar1.Panels[1].text:='Geändert'; changed := true; end; // length end; // Checked ... end. |
Re: Konstantenzuweisung [von tmemo.items]
auf den ersten blick siehts ja identisch aus. :roll:
ich schau mir das morgen nachmittag an. danke dir erst mal. okay habs mirs angeschaut. aber das problem wäre leider immer noch nicht gelöst- :cry: hat einer ahnung mit TStringlists? |
Re: Konstantenzuweisung [von tmemo.items]
hi,
hast mir ne pm geschickt, aber ich kapiere nicht ganz dein problem! das verhindern von dubletten in der stringliste geht mit der eigenschaft "sorted" auf true und "Duplicates" auf dupIgnore! siehe hilfe! du darfst aber dann den text nicht über die stringlisten-eigenschaft "Text" zuweisen, sondern "add" oder "addstrings" geht glaube auch! ne Stringlistenverarbeitung immer so machen:
Delphi-Quellcode:
hoffe es half bißchen.
sl := TStringlist.create;
try hier die Verarbeitung! finally sl.free; end; ansonsten nochmal fragen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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