![]() |
Umsetzungsproblem Filterklasse
Hi,
ich habe mir für ein Projekt eine Klasse geschrieben, die eine TIdMessage auf einige Dinge überprüfen soll. Genau gekommen ist es eine Filterklasse. Das Problem ist nun, dass ich verschiedene Kriterien in Form eines Sets habe und ich jetzt irgendwie bei der Ergebnis Berechnung dieses Set einbeziehen muss. Derzeit sieht das ganze so aus:
Delphi-Quellcode:
Mein Problem ist beim endgültigen Ergebnis. Denn ich kann nicht einfach die ganzen einzelnen Results mit and verknüpfen, da ich ja dann z.B. haben (true, true, false, false), obwohl die letzten beiden Results nicht berücksichtigt werden können, da sie nicht in dem FSearchIn-Set vorhanden sind. D.h. die Nachricht würde rausfallen, obwohl eigentlich die Nachricht auf den Filter zutrifft. :?
function TFilterClass.Match(aMessage: TIdMessage): boolean;
var Result1, Result2, Result3, Result4: boolean; begin Result := false; // Einzelne Such-Felder überprüfen if ([sSubject] in FSearchIn) then begin // Betreff Result1 := { Überprüfe... }; end; if ([sFrom] in FSearchIn) then begin // Absender Result2 := { Überprüfe... }; end; if ([sTo] in FSearchIn) then begin // Empfänger Result3 := { Überprüfe... }; end; if ([sBody] in FSearchIn) then begin // Nachrichteninhalt Resul4 := { Überprüfe... }; end; Result := { ENDGÜLTIGES ERGEBNIS } end; Kann mir da jemand einen Vorschlag machen bzw. die Erleuchtung bringen? :( :coder2: Chris |
Re: Umsetzungsproblem Filterklasse
Delphi-Quellcode:
oder
function TFilterClass.Match(aMessage: TIdMessage): boolean;
begin Result := true; // initialisieren // Einzelne Such-Felder überprüfen if ([sSubject] in FSearchIn) then begin // Betreff Result := Result and { Überprüfe... }; end; if ([sFrom] in FSearchIn) then begin // Absender Result := Result and { Überprüfe... }; end; if ([sTo] in FSearchIn) then begin // Empfänger Result := Result and { Überprüfe... }; end; if ([sBody] in FSearchIn) then begin // Nachrichteninhalt Result := Result and { Überprüfe... }; end; end;
Delphi-Quellcode:
function TFilterClass.Match(aMessage: TIdMessage): boolean;
begin Result := false; // Einzelne Such-Felder überprüfen if ([sSubject] in FSearchIn) then begin // Betreff if not { Überprüfe... } then Exit; end; if ([sFrom] in FSearchIn) then begin // Absender if not { Überprüfe... } then Exit; end; if ([sTo] in FSearchIn) then begin // Empfänger if not { Überprüfe... } then Exit; end; if ([sBody] in FSearchIn) then begin // Nachrichteninhalt if not { Überprüfe... } then Exit; end; Result := true; end; |
Re: Umsetzungsproblem Filterklasse
Hi,
ja, danke. Das ist genau das was ich gesucht habe (auch wenn ich deine zweite Lösung genau anders rum verwendet habe :zwinker:). Chris |
Re: Umsetzungsproblem Filterklasse
du kannst auch die ergebnisse zusammennehmen und mit and verknüpfen und darin mit or
Zitat:
Delphi-Quellcode:
(anstelle von den constanten true bzw. false musst du dort natürlich die andere Bedingungen einsetzen)
result := (not([sSubject] in FSearchIn) or true) and
(not([sFrom] in FSearchIn) or true) and (not([sTo] in FSearchIn) or false) and (not([sBody] in FSearchIn) or false); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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