Вы писали: Здравствуйте, PC Gamer! Программа в приложении устрашит любого своими размерами. Сохрани её в файл RenameFile.DPR и открой Делфями. program Project1; uses SysUtils, Windows, Dialogs; var s1,s2 : string; begin s1 := ParamStr(1); s2 := InputBox('Переименование','Введите новое расширение',''); s2 := ChangeFileExt(s1,s2); if not RenameFile(s1,s2) then MessageBox(0,'Невозможно переименовать файл',nil,MB_OK or MB_ICONERROR); end. --> Я ведь не для ентого писал. Даже попробывать твою программу. Попробуй с ее помощью переименовать файл допустим "Текстовый документ.txt". Что получится? Сокращенное имя вроде "ТЕКСТОВ~1.TXT" Вот! Так как мне теперь сделать так, чтобы файл переименовывался без сокращений???
Ниже - кусок REG файла, с которым у меня всё работет. Замени пути к программе на свои - и всё будет путём. Похоже, что с тобой сыграл злую шутку параметр "%l".
Ответ отправлен: 21.08.2002, 17:58 Отправитель: Артём Шегеда
Вопрос № 144
Я ентот вопросик писал ужо, но я его по другому сформулирую. КАК ЧЕРЕЗ ДЕЛЬФИ СОЗДАТЬ ФАЙЛ, КОТОРЫЙ НЕЛЬЗЯ УДАЛИТЬ СТАНДАРТНЫМИ СРЕДСТВАМИ ВИНДЫ(МОЖНО И ДОСА). Только напишите функцию пожайлуста, или хотябы объясните как этот фокус провенуть???
Доброе время суток, PC Gamer! А никак. Если хочешь, чтобы нельзя было удалить файл пока работает твоя программа - просто "открой" его для чтения и не закрывай, пока он тебе нужен. Ответ отправлен: 21.08.2002, 17:34 Отправитель: Necro Отвечает baldr
Приветствую Вас, PC Gamer! Провернуть это можно с помощью прямого обращения к диску. Это достаточно сложно, особенно под виндой... Ты лучше напиши, зачем тебе это надо - может что полегче придумать можно?
Ответ отправлен: 21.08.2002, 23:38 Отправитель: baldr Отвечает Pablo
Здравствуйте, PC Gamer! Так если тебе нужно чтоб с этим файлом вовобще нельзя было ничего сделать, то тебе нада написать прогу которая файл прятала бы между логическими дисками, если просто чтоб вындовс загружался и файл этот был виден, но недоступен, то тебе нужно написать драйвер, сервис или просто прогу, которая будет занимать файл защищая тем самым от чтения, записи или удаления его от других программ. Ответ отправлен: 22.08.2002, 15:30 Отправитель: Pablo Отвечает Sanya
Приветствую Вас, PC Gamer! Ты извращенец что-ли? Нельзя такое сделать! Но если очень хочется создай что-то вроде "файлового хука" т.е. резидентную прогу которая откроет у себя этот файл дав другим право на чтение этого файла! Ответ отправлен: 22.08.2002, 03:11 Отправитель: Sanya Отвечает Igoryk
Приветствую Вас, PC Gamer! Ну я уже говорил: создай файл, а потом не добавляй команду close в конце программы. Windows будет думать что твоя программа работает с этим файлом и удалить его не сможет. Но, правда, есть команды по типу 'удалить несмотря ни на что'... Ответ отправлен: 22.08.2002, 10:20 Отправитель: Igoryk
Вопрос № 145
Здравствуйте, PC Gamer! Ниже - кусок REG файла, с которым у меня всё работет. Замени пути к программе на свои - и всё будет путём. Похоже, что с тобой сыграл злую шутку параметр "%l". REGEDIT4[HKEY_CLASSES_ROOT*][HKEY_CLASSES_ROOT*shell][HKEY_CLASSES_ROOT*shellename_new][HKEY_CLASSES_ROOT*shellename_newcommand]@=""D:\Work\Delphi\WinAPI 1\Project1.exe" "%l"" Да вроде бы я ентот %1 прописывал в реестре. Короче вот полный исходный код программы: Исправьте plz что неправильно.
Да не единица, а буква L маленькая (в смысле Long File Name). Ответ отправлен: 21.08.2002, 21:41 Отправитель: Артём Шегеда
Вопрос № 146
--> Приветствую Вас, PC Gamer! Да не единица, а буква L маленькая (в смысле Long File Name). Я изменил строку reg.WriteString('',application.exename+' %1'); на ('',application.exename+' %1 %l'); но эффект тот же самый - укороченное имя. Я пробывал и ('',application.exename+' %l'); в этом случае при выборе в меню файла команды NameRe ничего не происходит. Шо це таке???
По-моему, у нас что-то не так... Пример (слегка модифицированный) - твой. Работает. На все 100%
program Project2; uses SysUtils, Classes, Forms, REGISTRY, Windows, dialogs; {$R *.RES} var n:integer; s1,s2:string; reg:TRegistry; begin reg:=TRegistry.Create; Reg.RootKey:=HKEY_CLASSES_ROOT; Reg.OpenKey('*\shell\NameRe\command', true); reg.WriteString('','"'+application.exename+'" "&l"'); reg.CloseKey; Reg.Free; if ParamCount=0 then Exit; s1:= ParamStr(1); s2:= InputBox('Переименование','Введите новое расширение',''); s2:= ChangeFileExt(s1,s2); RenameFile(s1,s2); end.
Приложение: Ответ отправлен: 22.08.2002, 14:23 Отправитель: Артём Шегеда
Вопрос № 147
--> По-моему, у нас что-то не так... Пример (слегка модифицированный) - твой. Работает. На все 100% -<< Я уже запарился с этой прогой. Пробовал твой исходник в Delphi засовывать. Скомпилировал. Запустил. Перезагрузился. Снова пробывал ее на файле Текстовый документ.txt появился InputBox. Ввел расширение htm. И нифига! Файл так и остался Текстовый документ.txt!!! Что делать??? :0
Давай перейдём на личную переписку, а то мусорим тут в рассылке...
Ответ отправлен: 23.08.2002, 12:04 Отправитель: Артём Шегеда
Вопрос № 148
Здравствуйте. Компонент TADOQuery использует SQL-запрос с параметром: SELECT ... FROM таблица WHERE поле =: Parameter; Вопрос: где в программе записать параметр Parameter - так что бы TADOQuery.SQL мог его видеть? Спасибо.
Добрый день, Bayram Annanurov! Насколько я знаю SQL(в Delhi я с ним не работал), туда передаётся запрос через conectionstring в виде строки: "Select AVG(Поле) From dbo.Таблица As Expression Where Поле=Параметр" Реальный пример: "(Select dbo.TableTag.Field + dbo.TableTag2.Field As Expr From dbo.TableTag CROSS JOIN dbo.TableTag2 WHERE (dbo.TableTag2.GetTime BETWEEN '" & StartDateTime & "' AND '" & EndtDateTime & "'))" Выбирается сумма полей Field из таблиц TableTag и TableTag2 когда поле GetTime(типа DateTime) из таблицы TableTag2 находится между StartDateTime и EndtDateTime! Удачи! Ответ отправлен: 23.08.2002, 02:59 Отправитель: Sanya Отвечает Vladimir
Добрый день, Bayram Annanurov! Query.Params.Clear; Query.Params.Add; Query.Params[0].DataType := ftString; Query.Params[0].asString := 'Stroka'; ну и т.д.
Ответ отправлен: 23.08.2002, 10:09 Отправитель: Vladimir Отвечает Pablo
Добрый день, Bayram Annanurov! Так вроде твой параметр может быть записан в строку AnsiString (string), Ну а когда формируешь запрос то добавляешь значение этой строки, например: int k = 124; AnsiString str(k); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("SELECT EmpNo, LastName, FirstName, HireDate"); ADOQuery1->SQL->Add("FROM Employee"); ADOQuery1->SQL->Add("WHERE Cash:=" + str); Ну вот чтото типа этого. Ответ отправлен: 23.08.2002, 18:31 Отправитель: Pablo
Вопрос № 149
Уважаемые эксперты! Подскажите как сворачивать программу к часам, используя средства Дельфи или ВинАпи
Открой Torry.NET, в поле Quick Search набери "tray icon" и нажми кнопку "Search". Взгляни на результаты и удивись - сколько людей готовы тебе помочь... А писать подобное на WinAPI - грязная работа. Ответ отправлен: 23.08.2002, 12:09 Отправитель: Артём Шегеда Отвечает Sanya
Доброе время суток, sergey! Ни в Delphi, ни где-либо ещё нельзя "свернуть программу к часам(т.е. в трей)". На самом деле происходит следующее: программа добавляет иконку в трей, а сама становится невидимой. Для добавления иконки нужно пользоваться ф-ией Shell_NotifyIcon. Она очень простая: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(dwMessage:DWORD, pnid:PNOTIFYICONDATA); dwMessage может принимать сл. значения: NIM_ADD Добавить иконку в трей NIM_DELETE Удалить иконку из трея NIM_MODIFY Изменить свойства иконки в трее Второй параметр pnid содержит тип NOTIFYICONDATA: typedef struct _NOTIFYICONDATA { // nid DWORD cbSize; // на практике это SizeOf(IconData) HWND hWnd; // хэндл главного окна твоего приложения UINT uID; // на практике - $DEDB UINT uFlags; // ставь NIF_MESSAGE or NIF_ICON or NIF_TIP UINT uCallbackMessage;
// индетификатор сообщения, которое будет // получать твоё приложение при "колдовании" пользователя над // иконкой в трее. Забей как константу, например WM_MyIcon = WM_USER + 1 HICON hIcon; // хэндл иконки, например, application.Icon.Handle char szTip[64]; // текст всплывающей подсказки } NOTIFYICONDATA, *PNOTIFYICONDATA; Всё. Осталось только ловить сообщения. Ответ отправлен: 23.08.2002, 03:54 Отправитель: Sanya Отвечает Vladimir
Приветствую Вас, sergey! Есть неплохой плагин называется CoolTrayIcon. Добавляешь его в Дельфи и пользуешься. Можно, конечно через WinIP, но уж очень это все "гиморно".
Ответ отправлен: 23.08.2002, 10:14 Отправитель: Vladimir Отвечает Pablo
Добрый день, sergey! В Дельфях или в Билдере есть такой компонент TTrayIcon, используй его. Ответ отправлен: 23.08.2002, 18:32 Отправитель: Pablo Отвечает Painbringer
Доброе время суток, sergey! нака:
Приложение: Ответ отправлен: 24.08.2002, 01:46 Отправитель: Painbringer
Вопрос № 150
Доброго времени суток эксперты, помогите разобраться с TTable, а проблема такая точнее их несколько, начну по порядку: 1) При индексации бд dBASEIII, делфи записывает устанавливает флаг что БД проиндексирована, если теперь индекс удалить то, при открытии этой бд, выскакивает сообщение что типа ошибка, индекс такой то не найден, сбрасываеть его приходиться в ручную: открыть БД как бинарный файл и записать в 28 байт 0, после этого все ОК, может кто знает средство как это сделать не через Ж!"№, а по людски и можно ли вообще. 2) Параметры для метода AddIndex для совместимости мне нужно (да и удобнее) хранить в отдельной бд, проблема в том как преобразовать тип TIndexOptions (множество) в какой нибудь тип dBASEIII (целое, строковой, булевое) и обратно, через case не пойдет т.к. свойства индексов сочетаются, слишком много придется вариантов перебирать. 3)
У того же AddIndex, первый параметр Name - зачем он нужен? если индексный файл создается с таким же именем, только с расширением други (у меня mdx). Спасибо.
Приветствую Вас, Serzhant! Чтото не совсем понятно, если ты удаляешл индекс то почему он должен быть найден?! А Name это же имя индекса, и я впервые слышу чтоб каждый индекс содердался в одлеьном файле, помому они или в БД держатся или все индексы в отдельном файле, но не каждый. Ответ отправлен: 23.08.2002, 18:35 Отправитель: Pablo
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.