Форум: "Начинающим";
Текущий архив: 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