Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 161
от 23.06.2005, 22:50

Администратор:Калашников О.А.
В номере:Вопросов: 4, Ответов: 10


Вопрос № 22318: Здравствуйте,я пишу программу DownLoader и столкнулся со следующей проблемой неполучается "впихнуть" Progressgar в ListView пожалуйста помогите. P.S и еще один вопрос пока моя програма качает в один поток и только 1 файл(тоесть 2 файла ...
Вопрос № 22326: Здраствуйте!! Очень волнует один вопрос. Как можно сделать так чтобы напрмер вовремя подключения модема к провайдеру можно было узнать что вот именно он сейчас проверяет логин а потом пароль и если вдруг не подходит сувал ддугой парль...
Вопрос № 22344: Здравствуйте, уважаемые знатоки. Запарился с поиском в Excel через Delphi. На строке sr:=...(см. код) выдает "несовпадение типов". Я наверное неправильно строю Find. Подскажите, пожалуйста, как сделать правильно. Зараннее бл...
Вопрос № 22352: Здравствуйте, Уважаемые эксперты! Вчера послал вам вопрос (№22311) о сортировке и выборке данных из БД, а сегодня сам же нашел на эти вопросы ответы. Честно говоря ваши ответы я еще не читал (только сейчас в Сеть вышел), но если таковые есть, то ...

Вопрос № 22.318
Здравствуйте,я пишу программу DownLoader и столкнулся со следующей проблемой неполучается "впихнуть" Progressgar в ListView пожалуйста помогите.
P.S и еще один вопрос пока моя програма качает в один поток и только 1 файл(тоесть 2 файла одновременно нельзя) качаю с помощью WinInet вот вопрос состоит в следующем : как сделать чтобы если у меня в ListView есть закачки то он их всех качал одновременно
Отправлен: 17.06.2005, 22:32
Вопрос задал: Scordion (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Tsechoev Bagaudin
Здравствуйте, Scordion!
На английском, но ты поймешь, все до нельзя просто.
http://delphi.about.com/library/weekly/aa053105a.htm
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 3-ий класс)
Отправлен: 17.06.2005, 23:59


Вопрос № 22.326
Здраствуйте!!
Очень волнует один вопрос.
Как можно сделать так чтобы напрмер вовремя подключения модема к провайдеру
можно было узнать что вот именно он сейчас проверяет логин а потом пароль
и если вдруг не подходит сувал ддугой парль или логин???
Отправлен: 18.06.2005, 01:17
Вопрос задал: newinfo2005 (статус: 2-ой класс)
Всего ответов отправлено: 3

Отвечает: Tsechoev Bagaudin
Здравствуйте, newinfo2005!
1. Сервер авторизации за один сеанс дозвона разрешает как правило только один раз ввести пароль или логин.
2. Пароль и Логин состоит, тоже как правило, из 10 цифр от 0 до 9 и 52 символов латинского алфавита (верхний и нижний регистры)
3. Пароль и логин длиной бывают не меньше 6 символов
4. Простая арифметика: 62 в степени 6 = 56800235584 возможных вариантов для логина и столько же для пароля, для 100% уверенности в успехе перемножаем эти два числа получаем 3226266762397899821056, допускаем что у провайдера 1000000 активных логинов, которые могут пользоваться инетом получаем 3226266762397900
5. Пусть на дозвон и проверку у нас уйдет 10 секунд, получается 32262667623979000 секунд или ~1023042400 лет, это при 100% гарантии.
Удачи ))

---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 3-ий класс)
Отправлен: 18.06.2005, 02:00

Отвечает: Ерёмин Андрей
Здравствуйте, newinfo2005!
Насчёт реализации в Delphi не могу ничего сказать, а вот если самому нужно видеть каждый этап соединения, рекомендую пользоваться звонилкой MDialer: http://muxasoft.com/. Очень дельная программа.
---------
Жизнь - игра, в которой нет setup'а...
Ответ отправил: Ерёмин Андрей (статус: 8-ой класс)
Отправлен: 18.06.2005, 10:16
Оценка за ответ: 4
Комментарий оценки:
Ну ладно пожалею лишь только из за того что подсказал

Отвечает: Delphin
Здравствуйте, newinfo2005!
Да, сделать пробуй через RAS.
Но это состояние соеденения. А ты хочешь я так понял подбирать логин а потмо пароль. Так вот тебе не скажет ни RSA ни PPP ни VPN сервер что он не принял логин или пароль. ДА и подобрать пароль не реально. Тут на компе где 22000 паролей в секунду подбирается пароль 6-ти значный подбирается 1,5 суток. Я не говорю про подбор на Dial-UP где каждый неверный пароль надо перезванивать.
Короче думай.

---------
Ищу сервис пак для школы ^)))
Ответ отправил: Delphin (статус: 6-ой класс)
Отправлен: 22.06.2005, 19:39


Вопрос № 22.344
Здравствуйте, уважаемые знатоки.
Запарился с поиском в Excel через Delphi.
На строке sr:=...(см. код) выдает "несовпадение типов".
Я наверное неправильно строю Find. Подскажите, пожалуйста,
как сделать правильно. Зараннее благодарю. Kraw.

Приложение:

Отправлен: 18.06.2005, 16:15
Вопрос задал: Кравцов Юрий Владимирович (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Pushkin
Здравствуйте, Кравцов Юрий Владимирович!
Вопрос видимо состоит в том, что не построена корректная работа с объектами TExcelApplication и др.
Привожу процедуру которая (для примера) копирует девять ячеек из Лист1 файла Book1.xls в StringGrid.
Думаю по этой процедуре можно разобраться со всем остальным.

procedure TForm1.Button1Click(Sender: TObject);
var
Values: OLEVariant;
XLSApp: TExcelApplication;
Workbook: _Workbook;
Sheet: _Worksheet;
r: Range;
i,j: Integer;
begin
XLSApp := TExcelApplication.Create(Self);
XLSApp.ConnectKind := ckNewInstance;
XLSApp.Connect;
Workbook := XLSApp.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Book1.xls', EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, false, 0);
try
Sheet := Workbook.Worksheets.Item['Ëèñò1'] as _Worksheet;
try
for i := 1 to 3 do begin
for j := 1 to 3 do begin
StringGrid1.Cells[i,j] := Sheet.Cells.Item[i,j].Value;
end;
end;
finally
r := nil;
Sheet := nil;
end;
except
end;
end;
Ответ отправил: Pushkin (статус: 4-ый класс)
Отправлен: 18.06.2005, 19:32
Оценка за ответ: 1
Комментарий оценки:
Pushkin, спасибо за ответ. Но в данном коде кроме перебора ячеек чтобы установиться на нужную я не увидел
(может смотрю не туда). Хотелось бы установиться сразу.

Отвечает: sir henry
Здравствуйте, Кравцов Юрий Владимирович!
В функции Find() довольно много параметров:
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat). :)
1. Попробуйте передать S как OleVariant.
2. xlValues - это не строка, а переменная. Почему Вы ее передаете как строку - непонятно не только мне, но и компилятору. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 20.06.2005, 06:13


Вопрос № 22.352
Здравствуйте, Уважаемые эксперты!
Вчера послал вам вопрос (№22311) о сортировке и выборке данных из БД, а сегодня сам же нашел на эти вопросы ответы. Честно говоря ваши ответы я еще не читал (только сейчас в Сеть вышел), но если таковые есть, то всем ответившим большое спасибо. У меня к Вам на сей момент есть еще два вопроса. Я их планировал еще вчера вам их задать вместе с тем, но когда писал тот вопрос эти два вылетели из головы. Проблема, о которой я с Вами сегодня поделюсь заключается в следующем. В моей программе есть кнопка "Опции". Щелкнув по этому меню открывается соответствующее окно, где можно настроить различные параметры программы, после чего сохранить их в некий файл. Так вот, среди опций я планирую поставить еще флажок "Автозагрузка". Т.е. если флажок выбран, то программа должна запускаться при каждом запуске Windows. Для этого я думаю помещать в папку Автозагрузка (в Windows имеет такую папку) ярлык исполняемого файла программы, в противном случае удалять его от труда. Но пр облема заключается в том, что на разных машинах Windows может находиться в разных папках, а тем более папка Автозагрузка. В связи с этим первый вопрос: как узнать адрес папки Автозагрузка. Я лишь догадываюсь, что это делается через WinAPI, но каким конкретно способом не знаю. И второй вопрос: как программным образом создать ярлык некоторого файла (к примеру, file.exe)?
Жду Ваших советов.
С Уважением,
Александр (zimorodokbrest@rambler.ru)
Отправлен: 18.06.2005, 18:40
Вопрос задал: Зимородкин Александр (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Jadd
Здравствуйте, Зимородкин Александр!
Дык на кой в автозагрузку-то?....Добавь в реестр. HKLMSoftwareMicrosoftWindowsCurrentVersionRun добавь свой раздел туда и твоя программа будет стартовать при каждом запуске винды. Есть тот способ, о котором ты просишь. Достичь этого можно используя функцию SHGetFolderPath. Вот его синтаксис:
HRESULT SHGetFolderPath(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath);

Параметр nFolder должен содержать флаг CSIDL_COMMON_STARTUP. Подробности в MSDN. Что касается линков или ярлыков, то открой MSDN и читай статью Shell Links. Там довольно много всего нужно сделать. Не забудь сказать спасибо.
---------
Hakuna matata
Ответ отправил: Jadd (статус: Студент)
Отправлен: 18.06.2005, 19:02
Оценка за ответ: 5
Комментарий оценки:
СПАСИБО:)))))))))

Отвечает: Ерёмин Андрей
Здравствуйте, Зимородкин Александр!

Описанный способ добавления программы в автозагрузку действительно неуниверсален, т.к. эта папка находится в различных местах на разных компьютерах. К тому же, пользователь может легко заметить вашу программу и удалить её оттуда. С точки зрения Windows правильнее прописывать автозагрузку программы в реестр. За это отвечают ключи HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun и тот же ключ в ветке HKEY_CURRENT_USER. В данный ключ следует записать строковый параметр, имя которого может быть любым (как правило, название программы), а параметр - путь к exe-файлу. При загрузке Windows будет автоматически запускать программу. Вот процедура для быстрого добавления программы в автозагрузку:

Procedure AddToWindowsAutoStart(Name: String; Cmd: String);
Var R: TRegistry;
Begin
R:=TRegistry.Create;
R.RootKey:=HKEY_LOCAL_MACHINE;
R.OpenKey('SOFTWAREMicrosoftWindowsCurrentVersionRun',True);
R.WriteString(Name,Cmd);
R.CloseKey;
R.Free;
End;

С удалением проблем не возникнет. Здесь идёт обычная работа с реестром.

Найти папку "Автозагрузка" также несложно и опять через реестр. Хранится этот путь вот где:
HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders - параметр Startup.

В Windows NT также существуют папки, общие для всех пользователей. Эти пути хранятся здесь:
HKLMSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders - параметр Common Startup.

Ярлыки создавать очень просто:

uses ShlObj, ComObj, ActiveX;

procedure CreateLink(const PathObj, PathLink, Desc, Param: string);
var
IObject: IUnknown;
SLink: IShellLink;
PFile: IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
with SLink do begin
SetArguments(PChar(Param));
SetDescription(PChar(Desc));
SetPath(PChar(PathObj));
end;
PFile.Save(PWChar(WideString(PathLink)), FALSE);
end;

Пример: CreateLink('C:WINDOWSexplorer.exe','C:Проводник.lnk','Запустить Проводник, 'C:Program Files');
На диске C: будет создан ярлык Проводник.lnk, запускающий Проводник на папке Program Files.

Надеюсь, приведённой мной информации более чем достаточно.
---------
Жизнь - игра, в которой нет setup'а...
Ответ отправил: Ерёмин Андрей (статус: 8-ой класс)
Отправлен: 18.06.2005, 19:23
Оценка за ответ: 5

Отвечает: Pushkin
Здравствуйте, Зимородкин Александр!
Автозагрузку программы удобнее осуществлять не через папку "Автозагрузка", а через реестр, файлы, которые запускаются при старте ОС находятся в реестре по адресу: HKLM Software Microsoft Windows CurrentVersion Run

Чтобы добавить в список свое приложение нужно применить следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
R:TRegistry;
begin
R:=TRegistry.Create;
R.RootKey:=HKEY_LOCAL_MACHINE;
R.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun',true);
R.WriteString('MyAppName',Application.ExeName);
// Вместо MyAppName можно написать краткое название своего приложения
R.Free;
end;

Чтобы убрать автозагрузку:

procedure TForm1.Button2Click(Sender: TObject);
var
R:TRegistry;
begin
R:=TRegistry.Create;
R.RootKey:=HKEY_LOCAL_MACHINE;
R.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun',true);
R.DeleteValue('MyAppName');
R.Free;
end;

Чтобы все работало необходимо добавить Uses Registry.
Ответ отправил: Pushkin (статус: 4-ый класс)
Отправлен: 18.06.2005, 19:56
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Зимородкин Александр!
1. Папка "Автозагрузка" находится:
C:\Documents and settings\Имя пользователя\Главное меню\Программы\Автозагрузка
Если программа должна запускаться под всеми пользователями, то вместо каталога "Имя пользователя" подставьте каталог "All users".
2. Если создать ярлык по простому, то сделайте его на рабочем столе и потом скопируйте его в нужную папку (в том числе и на другом компе, если Ваша программа помещается всегда в одно и тоже место, например - "C:\MyProgg"). :)
***********
Програмно.
Для начала подключите следующие модули:
uses ShlObj, ComObj, ActiveX;
Процедура создания - см в приложении.

Приложение:

Ответ отправил: sir henry (статус: Профессор)
Отправлен: 20.06.2005, 06:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное