Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.005 c
2-1225095258
Zhekson
2008-10-27 11:14
2008.12.07
MessageDlg, три варианта ответа, да, нет, отмена.


15-1222839778
ВадимЛ
2008-10-01 09:42
2008.12.07
Починить Делфи Д5 (пути ?)


2-1224830949
AlekseyB
2008-10-24 10:49
2008.12.07
Как загрузить файл в ListBox ???


2-1225252963
b@v
2008-10-29 07:02
2008.12.07
Время создания файла


2-1225131608
Thor234
2008-10-27 21:20
2008.12.07
Помогите пожалуйста начинающему





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский