AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Memo Durchsuchen & Fortschritsanzeige
Thema durchsuchen
Ansicht
Themen-Optionen

Memo Durchsuchen & Fortschritsanzeige

Ein Thema von Noobix93 · begonnen am 18. Jun 2008 · letzter Beitrag vom 7. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Noobix93

Registriert seit: 28. Mär 2008
Ort: Münster
21 Beiträge
 
#1

Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:17
Mit dieser Procedur möchte ich ich Leuten helfen die eine kleine Suchfunktion in ihr Programm einbauen möchten.

Uses: ...,Math
Delphi-Quellcode:
function RoundToPointPosition(Number : Extended; PointPos : Byte): Extended;
Var
  Multi:Integer;
begin
  Multi:=Trunc(IntPower(2,PointPos));
  Result := Round(Number * Multi)/Multi;
end;
Delphi-Quellcode:
procedure searchfunc(const Anzeige:Tmemo; Ripping:Tmemo; Input:Tedit; Progressbar:Tprogressbar; Percent:Tlabel; Found:Tlabel );
var i,poss:integer;
percents:extended;
searchline,strclear:string;
begin
Anzeige.lines.Clear; // Die Anzeige säubern
for i := 1 to ripping.Lines.count do
 begin
  searchline:=Ripping.lines[i]; // Die Zeilen zuweisen indenen gesucht werden soll
  poss := Pos(''+input.text+'', searchline); // Überprüfen ob richtiger Wer gefunden wurde
  Application.ProcessMessages; // Prozess-Messages damit das Programm reagiert
  percents:=i*100/Ripping.lines.count; // Prozentsatz mit 3-Satz ausrechnen
  percents:=RoundToPointPosition(percents,0); // Runden der % Zahl auf ganze Zahlen
  strclear:=floattostr(percents); // Umwandlung der FLot-Zahl in einen String
  ProgressBar.Position:=strtoint(strclear); // Umwandlung in einen Integer Wert für die Progressbar
  Percent.caption:=''+floattostr(percents)+'%'; // Vortschrits% Label
  Found.caption:=''+inttostr(Anzeige.lines.count)+' results for '+input.text+'';// Anzeige der gefundenen Resultate für "input"
  if Poss <> 0 then
    Anzeige.lines.add(searchline); // Wenn gefunden wird nun die Zeile hinzugefügt wo der Wert gefunden wurde
 end;
 if Anzeige.lines.count=0 then
  Anzeige.lines.add('No results found for '+input.text+'');
end;

Aufruf:
searchfunc(Anzeige,Ripping,edit35,progressbar4,label309,label310);
STRG+ C ist zwar Freund des Programmierers aber am ende versteht man es selber nicht mehr
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#2

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:21
Hast Du das getestet? Eigentlich müsste zumindest ein Indexfehler kommen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#3

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:23
Delphi-Quellcode:
procedure searchfunc(const Anzeige:TStrings; Ripping:Strings; Input:string; Progressbar:Tprogressbar; Percent:Tlabel; Found:Tlabel );
var i,poss:integer;
percents:extended;
searchline,strclear:string;
begin
  Anzeige.Clear; // Die Anzeige säubern
  for i := 1 to ripping.count{-1} do
  begin
    searchline:=Ripping[i]; // Die Zeilen zuweisen indenen gesucht werden soll
    poss := Pos(''+input.text+'', searchline); // Überprüfen ob richtiger Wer gefunden wurde
    Application.ProcessMessages; // Prozess-Messages damit das Programm reagiert
    percents:=i*100/Ripping.count; // Prozentsatz mit 3-Satz ausrechnen
    percents:=RoundToPointPosition(percents,0); // Runden der % Zahl auf ganze Zahlen
    strclear:=floattostr(percents); // Umwandlung der FLot-Zahl in einen String
    ProgressBar.Position:=strtoint(strclear); // Umwandlung in einen Integer Wert für die Progressbar
    Percent.caption:=''+floattostr(percents)+'%'; // Vortschrits% Label
    Found.caption:=''+inttostr(Anzeige.count)+' results for '+input.text+'';// Anzeige der gefundenen Resultate für "input"
    if Poss <> 0 then
      Anzeige.add(searchline); // Wenn gefunden wird nun die Zeile hinzugefügt wo der Wert gefunden wurde
  end;
  if Anzeige.lines.count=0 then
    Anzeige.add('No results found for '+input.text+'');
end;
Etwas Sauberer und! vllt. will das jmd. in einem RichEdit verwenden...
nimm TStrings, ich habs schon eingefügt!
mfg
Marius
  Mit Zitat antworten Zitat
Noobix93

Registriert seit: 28. Mär 2008
Ort: Münster
21 Beiträge
 
#4

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:25
Ist getestet, keine Probleme.
Mein Programm benutzt es um Dateien zu durchsuchen bisher hat sich noch keiner der über 300 Benutzern über irgendetwas beschwert.

Danke dir
STRG+ C ist zwar Freund des Programmierers aber am ende versteht man es selber nicht mehr
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#5

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 16:26
Was ist denn Strings für eine Klasse? Und IMHO müsste esfor i := 0 to ripping.count -1 heißen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#6

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 17:05
Ich hab das ganze mal etwas umgeschrieben um es allgemeiner anwenden zu können (ungetestet da Delphi nicht offen)

Delphi-Quellcode:
type
  TProgressEvent = procedure(aWorkPos, aWorkMax, aResultsFound: integer) of object;

procedure SearchFunc(const aTarget, aRipping: TStrings; SearchStr: string;
                     CaseSensitive: boolean; aCallBackEvent: TProgressEvent);
var i : integer;
    iTexPos : integer;

    iWorkPos, iWorkMax : integer;
    iResultsFound : integer;
    sCurrentLine : string;
begin
  // Ergebnis leeren und Variablen initialisieren
  aTarget.Clear;
  iWorkMax := aRipping.Count;
  iResultsFound := 0;
  
  for i := 0 to aRipping.Count-1 do
  begin
    sCurrentLine := aRipping[i];
    if CaseSensitive then
       iTexPos := Pos(SearchStr, sCurrentLine)
    else
       iTexPos := Pos(AnsiLowerCase(SearchStr), AnsiLowerCase(sCurrentLine));
    
    // falls der Such-String gefunden wurde
    if iTexPos > 0 then
    begin
      // Ergebniss in Liste hinzufügen und Zähler erhöhen
      aTarget.Add(sCurrentLine);
      inc(iResultsFound);
    end;

    // Aktuelle Position (+1 da Zeile schon durchsucht)
    iWorkPos := i + 1;

    // Call-Back-Event auslösen
    if Assigned(aCallBackEvent) then
       aCallBackEvent(iWorkPos, iWorkMax, iResultsFound);
  end;
end;
Aufruf:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure SearchCallBack(aWorkPos, aWorkMax, aResultsFound: integer);
    
  end;

implementation

{ .... }
  
procedure TForm1.SearchCallBack(aWorkPos, aWorkMax, aResultsFound: integer);
begin
  lbPercentDone.Caption := FloatToStrF(aWorkPos / aWorkMax * 100, ffNumber, 8, 0)+'%';
  lbResultsFound.Caption := IntToStr(aResultsFound);
  Application.ProcessMessages;
end;

procedure TForm1.StartSearch;
begin
  SearchFunc(ErgebnissMemo.Lines, SuchMemo.Lines, SuchEdit.Text,
             CaseSensitiveCheckBox.Checked, SearchCallBack);
end;
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 18. Jun 2008, 17:15
Zitat von Noobix93:
Mit dieser Procedur möchte ich ich Leuten helfen die eine kleine Suchfunktion in ihr Programm einbauen möchten.
Also ehrlich gesagt, ich würde mich schämen, einen solch grauenhaften Code hier einzustellen.

- schlechte Code-Formatierung
- unpassende Variablennamen
- fast keine Gross/Kleinschreibung
- und als Krönung sind auch noch Rechtschreibfehler in den Kommentaren

Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 4. Jul 2008, 00:41
Die Idee ist nett, aber braucht man das? Eine Suche mit Fortschrittsanzeige macht erst bei solchen Datenmengen Sinn, die mit normalen Controls nichts mehr vernünftig darstellbar ist. Solche Controls, die das aber können, werden aber vermutlich eine entsprechende Funktion eingebaut haben?
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#9

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 4. Jul 2008, 00:58
Jetzt wo ich gerade die Antwort von RavenIV sehe: meinst du meinen Beitrag (hoffentlich nicht ) [ist nicht vorwerfend gemeint sondern nur nachfragend]

@Dax:
Ich glaube auch, dass diese Fortschrittsanzeige nicht so sehr brauchbar ist. Aber vielleicht hilft es dem ein oder anderen, Fortschrittsanzeigen genauer zu verstehen - jetzt nicht vielleicht mit dem Quelltext aus dem ersten Beitrag, aber so grob ist das keine all zu schlechte Idee.
Oder man blendet die "Fortschrittsanzeige" aus und sieht es als eine einfache und schnelle Möglichkeit, Text in einem Memo zu suchen. Die Kombination an sich ist nicht so gut, da beide Teile im ersten Post nicht sehr ausgereift wirken, doch die einzelnen Teile, Suche und Fortschrittsanzeige, sind vielleicht doch zu gebrauchen.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Memo Durchsuchen & Fortschritsanzeige

  Alt 4. Jul 2008, 01:11
Zitat von littleDave:
Oder man blendet die "Fortschrittsanzeige" aus und sieht es als eine einfache und schnelle Möglichkeit, Text in einem Memo zu suchen.
Wenn ich mich recht erinnere, hat das Memo bereits entsprechende Funktionen - leider hab' ich aber grad kein Delphi da, um das zu überprüfen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
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