var AAreaCount: Integer; function Initialize: Boolean; var AAreas: String; begin // return false to cancel the filter operation result := False; AAreaCount := ReadFromRegistry('FilterWithXAreas', 'AreaCount', 1); AAreas := IntToStr(AAreaCount); if AskInput('Areas Count', 'How many areas should exist?', '', AAreas, False, nil) then begin if not IsValidNumberString(AAreas, False, '') then Say('Please enter a valid number') else begin AAreaCount := Trunc(StrToFloat(AAreas)); WriteToRegistry('FilterWithXAreas', 'AreaCount', AAreaCount); result := True; end; end; end; procedure Finalize; begin end; function Filter(AItem: TImageItem): Boolean; var AAreas: TCatalogAreas; begin AItem.Fetch; AAreas := TCatalogAreas.Create(TCatalogArea, ''); try PublicCatalog.EnumAreasForImage(AItem, AAreas); result := (AAreas.Count = AAreaCount); finally AAreas.Free; end; end;