Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStrings[Memo] mit Variable steuern (https://www.delphipraxis.net/69272-tstrings%5Bmemo%5D-mit-variable-steuern.html)

danku 12. Mai 2006 18:40


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]

pszopp 12. Mai 2006 19:55

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:
// Deklaration
var SonderZeichen : TStringList;

...

initialization
  // Erzeugt das Objekt beim Programmstart.
  SonderZeichen := TStringList.Create;
finalization
  // Gitb es kurz vor Programmende wieder frei.
  FreeAndNil(SonderZeichen);
end;
Typische Operationen mit einer Liste sind.
1) Einfügen (SonderZeichen.Add)
2) Löschen (SonderZeichen.Delete)
3) Laden & Speichern (SonderZeichen.LoadFromFile & SonderZeichen.SaveToFile)


Hoffe das hilft ?!?

danku 13. Mai 2006 10:50

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,' ');

pszopp 13. Mai 2006 10:56

Re: Konstantenzuweisung [von tmemo.items]
 
Hilft das weiter?

Delphi-Quellcode:
for lk := 0 to Search_text.Count - 1 do begin
  StringGridReplace(sgfiles, Search_text[lk], ' ');
end; // for lk
Gruß,
pszopp

danku 13. Mai 2006 11:20

Re: Konstantenzuweisung [von tmemo.items]
 
danke das hilft mir erstmal.

Delphi-Quellcode:
Search_Text := TStringList.Create;
  Search_Text.Add(edfilter.text);

  lbfilter.Items.AddStrings(Search_Text);

  Search_Text.free;
funzt aber net richtig.
wenn man bei dem filter z.b. alben-dreams eingibt (was ja gelöscht werden soll)
kommt eine fehlermeldung "zugriffsverletzung"

pszopp 13. Mai 2006 14:24

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

danku 13. Mai 2006 14:57

Re: Konstantenzuweisung [von tmemo.items]
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier kann man den filter hinzufügen:

Delphi-Quellcode:

//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;
und das ist der button "anwenden" für die erste checkbox...


Delphi-Quellcode:
...
   //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.
kann man überhaupt mit der variablen Search_Text in einer stringlist (tlistbox mit mehreren items) arbeiten?

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.

pszopp 14. Mai 2006 19:18

Re: Konstantenzuweisung [von tmemo.items]
 
Wie sieht es denn damit aus?
Delphi-Quellcode:
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.
Hilft dir das???

danku 14. Mai 2006 19:42

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?

marlem 15. Mai 2006 16:00

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:
sl := TStringlist.create;
try
hier die Verarbeitung!

finally
sl.free;
end;
hoffe es half bißchen.
ansonsten nochmal fragen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz