Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.07;
Скачать: CL | DM;

Вниз

SaveDialog1.FileName   Найти похожие ветки 

 
Zhekson   (2008-10-28 16:43) [0]

Есть функция, которая выдаёт количество файлов определённого разрешения в папке, для индексирования...


function GetFileCount(Dir: string; MaskF: string): integer;
var
 fs: TSearchRec;
begin
 Result := 0;
 if FindFirst(Dir + MaskF, faAnyFile - faDirectory - faVolumeID, fs) = 0
   then
   repeat
     inc(Result);
   until
     FindNext(fs) <> 0;
 FindClose(fs);
end;


Его обработчик:

procedure TForm1.SaveDialog1FolderChange(Sender: TObject);
begin
SaveDialog1.FileName := IntToStr(GetFileCount(GetCurrentDir; "*.tbl") + 1);
end;


функция GetFileCount на выходе выдаёт соответствующее кол-во файлов, но присвоения параметра не происходит. Почему?


 
Zhekson   (2008-10-28 16:45) [1]

Извиняюсь, расширения файлов ))


 
Правильный$Вася   (2008-10-28 16:52) [2]


> GetFileCount(GetCurrentDir; "*.tbl")

и это работает?

и что "расширение"?


 
Zhekson   (2008-10-28 17:05) [3]

Правильный$Вася   (28.10.08 16:52) [2]
если ты имееш ввиду точку с запятой, то в вопросе её роль минимальна... главное - это почему ф-ция правильно просчитывает кол-во файлов, в необходимой для этого папке и не присваивает нове имя файла???


 
Сергей М. ©   (2008-10-28 17:09) [4]


> почему ф-ция .. не присваивает


И где же в реализации этой ф-ции хоть что-либо напоминающее "присваивает нове имя файла" ?


 
Сергей М. ©   (2008-10-28 17:13) [5]


> присвоения параметра не происходит


procedure TForm1.SaveDialog1FolderChange(Sender: TObject);
begin
SaveDialog1.FileName := "2";
ShowMessage(SaveDialog1.FileName); // ЧТО видишь ?
end;


 
Zhekson   (2008-10-28 17:13) [6]

2 Сергей М. ©   (28.10.08 17:09) [4]

SaveDialog1.FileName := IntToStr(GetFileCount(GetCurrentDir; "*.tbl") + 1);

а вернее: SaveDialog1.FileName := SaveDialog1.FileName + IntToStr(GetFileCount(GetCurrentDir; "*.tbl") + 1);

но эффект тот же...((


 
Сергей М. ©   (2008-10-28 17:16) [7]


> Zhekson   (28.10.08 17:13) [6]


Это не имеет отношения к реализации функции.
Не важно что делает функция - важно что она возвращает некое значение типа integer


 
{RASkov} ©   (2008-10-28 17:16) [8]

> [6] Zhekson   (28.10.08 17:13)

Да бестолку в данном обработчике напрямую изменять свойство FileName....


 
Сергей М. ©   (2008-10-28 17:17) [9]


> {RASkov} ©   (28.10.08 17:16) [8]


А он не про обработчик - он про функцию долдонит).. Вызов которой он осуществляет в обработчике и при этом пеняет на функцию)


 
Правильный$Вася   (2008-10-28 17:19) [10]


> а вернее: SaveDialog1.FileName := SaveDialog1.FileName +
> IntToStr(GetFileCount(GetCurrentDir; "*.tbl") + 1);

т.е. ты хочешь, чтобы при перемещении между папками имя файла все увеличивалось и увеличивалось в ДЛИНЕ ?


 
Zhekson   (2008-10-28 17:24) [11]

Правильный$Вася   (28.10.08 17:19) [10]
хм...


 
{RASkov} ©   (2008-10-28 17:25) [12]

> А он не про обработчик - он про функцию долдонит)..

Функция его тоже не из "прямых".... Но не в ней конечно же дело.... куда уж нагляднее [5]?


 
Сергей М. ©   (2008-10-28 17:25) [13]


> Zhekson   (28.10.08 17:24) [11]


Ты не хмыкай, ты скажи причем здесь функция)..


 
Zhekson   (2008-10-28 17:33) [14]

Сергей М. ©   (28.10.08 17:13) [5]
и как быть???

Ф-ция считает кол-во файлов определённого расширения, в определённой папке. Это нужно для определения нового имени файла, которое будет получено путем прибавления единицы к количеству файлов в папке. Подсчёт производится успешно, но присвоения не происходит. Почему???


 
{RASkov} ©   (2008-10-28 17:35) [15]

> [14] Zhekson   (28.10.08 17:33)

Поищи в интернете пример "дотукивания" до "имени файла" в диалоге с применением EnumChildWindows функции...
Пример, на сколько мне помнится, был связан со сменой расширения при смене типа файлов но исправить для твоей задачи - не составит труда.


 
{RASkov} ©   (2008-10-28 17:39) [16]

> [14] Zhekson   (28.10.08 17:33)
> Ф-ция считает кол-во файлов определённого расширения, в
> определённой папке. Это нужно для определения нового имени
> файла
, которое будет получено путем прибавления единицы
> к количеству файлов в папке. Подсчёт производится успешно,
> но присвоения не происходит. Почему???

А если такое имя уже будет, то что?
Скорее всего у тебя не верный алгоритм присвоения нового имени....


 
{RASkov} ©   (2008-10-28 17:40) [17]

> не верный алгоритм присвоения нового имени....

(получения, генерация)


 
Zhekson   (2008-10-28 17:49) [18]

Сергей М. ©   (28.10.08 17:25) [13]
вообще ты прав, ф -ция в данном случае не при чём... вопрос скорее, как обратиться к свойству имени файла???


 
Правильный$Вася   (2008-10-28 19:01) [19]


> хм...

а ты подумай
я зашел в папку - у тебя плюсуется имя
я вышел из папки - у тебя опять плюсуется имя (строка)
я так могу гулять долго, а имя у тебя получится состоящее из всех цифр переходов


 
Сергей М. ©   (2008-10-28 19:58) [20]


> как обратиться к свойству имени файла?


Да вот прямо так и обращайся...

Вопрос-то, видимо, в другом - является ли упомянутый тобой обработчик (процедурный метод !!!) подходящим "местом" для установки значения этоо свойства..


 
Zhekson   (2008-10-28 20:05) [21]

Сергей М. ©   (28.10.08 19:58) [20]
Впринципе место идеальное(SaveDialog1FolderChange), но раз в нм нельзя использовать это свойство, то какие ещё есть варианты???


 
{RASkov} ©   (2008-10-28 20:23) [22]

> [21] Zhekson   (28.10.08 20:05)
> какие ещё есть варианты???

Пробывал [15]?


 
{RASkov} ©   (2008-10-28 21:27) [23]

Держи:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

const READ_FILENAME = WM_USER+101;

type
 TForm1 = class(TForm)
   SaveDialog1: TSaveDialog;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure SaveDialog1FolderChange(Sender: TObject);
 private { Private declarations }
   procedure GenerateFileName(var Mes: TMessage); message READ_FILENAME;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 PostMessage(Handle, READ_FILENAME, Integer(SaveDialog1), 0);
 SaveDialog1.Execute;
end;

procedure TForm1.GenerateFileName(var Mes: TMessage);
begin
 SaveDialog1FolderChange(TSaveDialog(Mes.WParam));
end;

function ReadDirAndGenerateFileName(const HWn: THandle; N: Longint): Longbool; stdcall;
var ss: ShortString; Ext: PChar absolute N;
function GetFileName: String;
var fs: TSearchRec; Cnt: Integer;
begin
  Cnt := 0;
  if FindFirst(IncludeTrailingPathDelimiter(GetCurrentDir)+"*."+Ext, faAnyFile, fs) = 0 then
  try repeat
   if (fs.Name=".") or (fs.Name="..") or ((fs.Attr and faDirectory)=faDirectory) then Continue;
   inc(Cnt);
  until FindNext(fs) <> 0;
  finally FindClose(fs); end;
  Result:=IntToStr(Cnt)+".myext";
  while FileExists(IncludeTrailingPathDelimiter(GetCurrentDir)+Result) do
   Result:="_"+Result;
end;
begin
 Byte(ss[0]):=GetClassName(HWn, @ss[1], 255);
 if ss="Edit" then begin
  SetWindowText(HWn, PChar(GetFileName));
  Result:=False;
 end else Result:=True;
end;

procedure TForm1.SaveDialog1FolderChange(Sender: TObject);
begin
 EnumChildWindows(GetParent(TSaveDialog(Sender).Handle), @ReadDirAndGenerateFileName, Integer(Pchar("pas")));
end;

end.

Примерно так....


 
{RASkov} ©   (2008-10-28 21:31) [24]

Код [23] не оптимальный, но думаю и этого не нужно было после последнего спора :)



Страницы: 1 вся ветка

Текущий архив: 2008.12.07;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
2-1225037381
redlord
2008-10-26 19:09
2008.12.07
потоко независимые классы


2-1224863435
NewSer
2008-10-24 19:50
2008.12.07
Как сделать в DBGridEh возможноть выбора значения из списка?


15-1222915880
Slider007
2008-10-02 06:51
2008.12.07
С днем рождения ! 2 октября 2008 четверг


15-1222873439
Городской Шаман
2008-10-01 19:03
2008.12.07
Обработчики исключений SEH vs classic C++


15-1222946859
Поросенок Винни-Пух
2008-10-02 15:27
2008.12.07
недвижимость в мичигане за пару баксов