Autor Beitrag
AnyKey
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 08.10.09 14:25 
Hi,

habe volgendes Problem: ich will/muss in einem RichEdit ein Wort suchen. Die Zeile in dem das wort gefunden wurde soll dann in einem neuen MDIChild in ein neues Richedit eingefügt werden. Bis jetzt sieht das ganze so aus: #

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
class function TStringManipulation.Suchen(Edit: TRichEdit; Progressbar: TProgressbar; SuchText: String): Bool;
var AResultList : TStringList;
var TextoutList : TSTringList;
var Linemax     : Integer;
var Textlen     : Integer;
var Child       : TfMDIChild;
var i           : Integer;
var j           : Integer;
var x           : Integer;
begin
  result := false;
  try
    AResultList := TStringList.Create;
    Linemax := Edit.Lines.Count-1;
    Textlen := Length(Edit.Lines.Text);
    ProgressBar.Position := 0;
    ProgressBar.Max := Linemax;
    x := 0;
    for i := 0 to Linemax do
    begin
      for j := 0 to Textlen do
      begin
        with Edit do
        begin
          x := posex(SuchText,Edit.Text,x)+1;
          SelStart := posex(SuchText,Edit.Text,x)-1;
          AResultList.Assign(Edit.Lines);   // <- An dieser stelle müsste nun die eine Zeile in der der Text gefunden wurde in die StringListe übertragen werden!!
          result := true;
        end;
      end;
      ProgressBar.Position := Progressbar.Position + 1;
    end;
    if result = true then
    begin
      fMain.CreateMDIChild('Suchergebnisse ' + IntToStr(fMain.MDIChildCount));
      if Assigned(fMain.ActiveMDIChild) then
      begin
        Child := fMain.ActiveMDIChild as TfMDIChild;
        for i := 0 to TextoutList.Count -1 do
        begin
          with Child.RichEdit1 do
          begin
            SelStart := 0;
            SelText := AResultList.Strings[i]+sLineBreak;//TextoutList.Strings[i]+sLineBreak;
            result := true;
          end;
        end;
      end;
    end;
    FreeAndNil(AResultList);
  except
    FreeAndNil(AResultList);
  end;
end;


Also das sieht jetzt wahrscheinlich sehr verwirrend aus und stimmt unter umständen auch garnich, aber ich hoff das mir einer von euch helfen kann, mein Problem ist wie gesagt dass ich aus dem RichEdit jeweils die Zeile in der das Suchwort gefunden wurde in die StringList geschrieben wird um diese später in das RichEdit des anderen MDIChilds zu schreiben.

Hoff ihr könnt mir helfen!

Gruß und Danke
AnyKey

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
baphumet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44

Windows XP
Delphi 7
BeitragVerfasst: Do 08.10.09 14:48 
Das funktioniert wie folgt, zu erst muß die StringList sortiert werden und dann kann
gesucht werden.:

ausblenden Delphi-Quelltext
1:
2:
StringList.Sort;
StringList.Find(String,Index);


Der Index wird dabei zurückgegeben und die Funktion gibt true zurück falls der String gefunden wurde, anderenfalls gibt die Funktion false zurück.


Zuletzt bearbeitet von baphumet am Do 08.10.09 14:50, insgesamt 1-mal bearbeitet
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Do 08.10.09 14:50 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
AResultList := TStringList.Create;
for i := 0 to Edit.Lines.Count-1 do     // Alle Zeilen durchgehen
  if pos(SuchText,Edit.Lines[i]) > 0 then // Wenn SuchText in der Zeile
    AResultList.Add(Edit.Lines[i]);     //   Zeile in ResultList einfügen

Result := AResultList.Count > 0;        

(.. Ergebnis ausgeben ..)

AResultList.Free;
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 08.10.09 14:53 
Hallo,

oder direkt in das zweite Richedit übertragen
ausblenden Delphi-Quelltext
1:
2:
3:
for z := 0 to RE_1.Lines.Count -1 do
  if Pos('SuchString',RE_1.Lines[z] > 0 then
    RE_2.Lines.Add(RE_1.Lines[z]);

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
AnyKey Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 08.10.09 15:00 
Hallo,

danke, das funktioniert super! Ich habe mit sicherheit 4 verschiedene Lösungswege ausprobiert, aber wirklich funktioniert hat es nie. :( schön zu sehen das die Lösung so leicht ist und ich einfach den Wald vor lauter Bäumen nich gesehen habe!

nochmals danke!

Gruß
AnyKey