![]() |
Re: Komplizierte suche in Memo ! Hilfe
huch
da fehlen die ) bei den pos ;) Kommt davon wenn man blind kopiert^^
Delphi-Quellcode:
so müsste es aussehn
for i:= 0 to memo1.lines.count-1 do begin
if pos(edit1.text, memo1.lines[i]) <> 0 then begin if pos(edit2.text, memo1.lines[i]) <> 0 then begin find = false; end else begin find = true; end; end else begin find:= false; end; end; |
Re: Komplizierte suche in Memo ! Hilfe
hab ich auch gerade bemerkt danke aber er führt das jetzt nicht aus makiert mir das nicht mehr !
und ich weiß nicht was ich für irgendwas eingeben soll ! weil im text steht z.b u8* oder u9* in edit1 muss ich was eingeben für irgendwas* und in edit2 far aber das funzt net ! |
Re: Komplizierte suche in Memo ! Hilfe
Zitat:
habe das jetzt so
Delphi-Quellcode:
er sagt mir aber das ich ungenügende parameter habe !
begin
For i:=0 to Memo1.lines.count - 1 do If Pos(edit1.text, Memo1.Lines[i]) = 0 Then // wenn der eine Suchtext in der Zeile nicht vorhanden ist Memo1.Lines[i] := StringReplace (Memo1.Lines[i], edit2.text, edit3.text); |
Re: Komplizierte suche in Memo ! Hilfe
da fehlt ein [rfReplaceall] oder etwas in der art am ende des stringreplace.
Aber das markiert dir immernoch nicht deine zeile :) Momentan fällt mir da nichts ein ausser SelStart auf die summe Längen aller zeilen bis zur gefundenen zu setzen und SelLength auf die Länge der dieser Zeile... Und das auch nur wenn ich SelStart richtig verstanden hab^^
Delphi-Quellcode:
Das sollte dir eine gesuchte Zeile markierenprocedure SelectLine (Memo: TMemo; index: integer); var i: integer; start: integer; begin start:= 0; for i:= 0 to index -1 do begin start:= start + length(Memo.Lines[i]; end; Memo.SelStart:= start; Memo.SelLength:= length(Memo.lines[index]); end; procedure FindLine (memo: TMemo; suchtext1, suchtext2: string); var i: integer; begin for i:= 0 to memo.lines.count-1 do begin if pos(suchtext1, memo.lines[i]) <> 0 then begin if pos(suchtext2, memo.lines[i]) <> 0 then begin find = false; end else begin find = true; SelectLine(memo, i); break; end; end else begin find:= false; end; end; Ist aber nicht getestet^^ |
Re: Komplizierte suche in Memo ! Hilfe
kann das vielleicht einer amchen und hochladen ?
ich sitze hier schon 9stunden dran und habe es immer noch nicht ! |
Re: Komplizierte suche in Memo ! Hilfe
Delphi-Quellcode:
unit Dialog_u; { Projekt DIALOG * Herwig Reidlinger }
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TFormDialog = class(TForm) Memo1: TMemo; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; MainMenu: TMainMenu; Menu_Datei: TMenuItem; MenuLaden: TMenuItem; MenuSpeichern: TMenuItem; N1: TMenuItem; MenuBeenden: TMenuItem; Suche1: TMenuItem; WeiterSuchen1: TMenuItem; Edit1: TEdit; Edit2: TEdit; N2: TMenuItem; selectline1: TMenuItem; CheckBox1: TCheckBox; procedure MenuLadenClick(Sender: TObject); procedure MenuSpeichernClick(Sender: TObject); procedure MenuBeendenClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure Suche1Click(Sender: TObject); procedure WeiterSuchen1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var FormDialog: TFormDialog; x: Integer; find: Boolean = False; implementation {$R *.DFM} procedure TFormDialog.MenuLadenClick(Sender: TObject); begin if OpenDialog.Execute then TRY Memo1.Lines.Loadfromfile(OpenDialog.Filename); EXCEPT ShowMessage ('Fehler beim Laden der Datei!'); END; end; procedure TFormDialog.MenuSpeichernClick(Sender: TObject); begin if SaveDialog.Execute then TRY Memo1.Lines.SavetoFile(SaveDialog.Filename); EXCEPT ShowMessage ('Fehler beim Speichern der Datei!'); END; end; procedure TFormDialog.MenuBeendenClick(Sender: TObject); begin FormDialog.Close; end; procedure TFormDialog.FormResize(Sender: TObject); begin Memo1.width := FormDialog.clientwidth; Memo1.height := FormDialog.clientheight; end; procedure TFormDialog.Suche1Click(Sender: TObject); begin // end; procedure TFormDialog.WeiterSuchen1Click(Sender: TObject); begin // end; end. muss jetzt nur noch die schleife rein kann mir da einer helfen ? |
Re: Komplizierte suche in Memo ! Hilfe
Hast du meinen code überhaupt mal getestet?
Ich hab grad ein mini Program damit geschrieben und das funktioniert soweit. Sind zwar ein paar fehler drin, zum beispiel ist die selection ein paar character daneben weil am ende jeder zeile noch ein $0D0A steht das bei length() ignoriert wird, aber in seltext steht was drin und es wird auch die richtige Zeile gefunden. SelStart und SelLength zu setzen scheint aber nicht auszureichen um eine selection auf dem bildschirm anzuzeigen. Das scheint Teil der windowsapi zu sein-.- Da schau ich nochmal nach aber vielleicht findest du ja selbst was. €dit ein einfach SetFocus scheint zu reichen um die selection zu markieren^^
Delphi-Quellcode:
GreeZ HenKst
procedure SelectLine (Memo: TMemo; index: integer);
var i: integer; start, fin: integer; begin start:= 0; fin:= length(Memo.lines[index]); for i:= 0 to index -1 do begin start:= start + length(Memo.Lines[i]) + 2; end; memo.SetFocus; Memo.SelStart:= start; Memo.SelLength:= fin; ShowMessage(memo.SelText); end; |
Re: Komplizierte suche in Memo ! Hilfe
Also entweder bin ich :? oder ihr habt jetzt den Nitron :? gemacht.
Ich dachte, der möchte in einem Memo-Feld etwas suchen ... da frage ich mich, warum ihr dem sagt, er soll mit StringReplace was machen, und vor allem das Ergebnis von StringReplace wieder in das Memo schreiben :gruebel: Also die Funktion klaue ich einfachmal
Delphi-Quellcode:
procedure SelectLine (Memo: TMemo; index: integer);
var i: integer; start, fin: integer; begin start:= 0; fin:= length(Memo.lines[index]); for i:= 0 to index -1 do begin start:= start + length(Memo.Lines[i]) + 2; end; memo.SetFocus; Memo.SelStart:= start; Memo.SelLength:= fin; // ShowMessage(memo.SelText); end;
Delphi-Quellcode:
Im Programm rufst du das so auf:
function SuchenInMemo( Memo : TMemo; FindenStr, NichtFindenStr : string; LastFindLine : integer = -1 ) : integer;
var LineIdx : integer; begin LineIdx := LastFindLine + 1; Result := 0; while ( LineIdx < Memo.Lines.Count ) and ( Result = 0 ) do begin if ( Pos( FindenStr, Memo.Lines[ LineIdx ] ) > 0 ) and ( Pos( NichtFindenStr, Memo.Lines[ LineIdx ] ) = 0 ) then begin Result := LineIdx; SelectLine( Memo, LineIdx ); end else Inc( LineIdx ); end; end;
Delphi-Quellcode:
cu
// Globale Variable oder Klassen-Variable deklarieren
var MyLastFindLine : integer; // beim Klick auf den Suchen-Button diesen Code MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text ); // Beim Klick auf Weitersuchen diesen Code MyLastFindLine := SuchenInMemo( Memo1, Edit1.Text, Edit2.Text, MyLastFindLine ); Oliver [edit]der fehler ist nun behoben[/edit] [edit2]jetzt tut die function genau das was sie soll :mrgreen: [/edit2] |
Re: Komplizierte suche in Memo ! Hilfe
ok ich war die woche nicht da muss mich jetzt wieder dran setzen danke ich werde posten wenn ich schwierigkeit habe !
|
Re: Komplizierte suche in Memo ! Hilfe
er kann es net compilieren er sagt mir das Count ein undefinierte Bezeichnung ist !
was soll ich da machen ? und muss dich die function einbinden ?? irgendwo oder macht das delphie automatisch ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 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