Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Совместная разработка

Автор: Dimonka
Дата сообщения: 02.06.2005 10:14
Shurshunchik007

Цитата:
{ Private declarations }' и '{ Public declarations }' - конечно коментарии, но на... они нужны.


Поэтому на.. не нужно их удалять. Ты же профессионал, вот и не трать своё время на всякие глупости.


CamTracer

Цитата:
Тогда уж bDebil. А то запутаешься)


Тебе советую почитать следующий документ:
http://community.borland.com/article/0,1410,10280,00.html
Не надо путать людей!

Автор: Raamzai
Дата сообщения: 02.06.2005 14:09
Когда-то была необходимость проверять наличие соединения с интернетом. Перепобывал многу фунций и сособов, вот этот самый работоспособный:

Цитата:

function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO;
pOutBufLen: PULONG): DWORD; stdcall;
external 'Iphlpapi.dll' name 'GetAdaptersInfo';

const
OutBufLen: ULONG = 2000;
AddrLen = 6;

var
AdapterInfo: IP_ADAPTER_INFO;
Result: DWORD;
i: integer;
Next: PIP_ADAPTER_INFO;

begin
Result:= GetAdaptersInfo(@AdapterInfo, @OutBufLen);
if Result = 0 then
begin
Next:= @AdapterInfo;
repeat
if Next^.GatewayList.IpMask = '0.0.0.0' then //Проверяем адрес шлюза
begin
write('Default gateway - ');
writeln(Next^.GatewayList.IpAddress);
writeln(Next^.GatewayList.IpMask);
end;
Next:= Next^.Next; // переходим к следующему адаптеру


until Next = nil;
end
else writeln('Error. Result code: ', Result);
write('Press <Enter> to continue...');
readln;
end.

Данный пример в консольном исполнении.
Автор: Ontarion
Дата сообщения: 02.06.2005 15:22
Писюн
Я уже писал в этой теме про примерную организацию труда. Если есть дельные предложения, то предлагай нормально. Организовываться надо начинать со сбора инфы о будущих разаработчиках - не надо медлить.

Что касается кода по проверке соединения с интернетом, то я его сегодня выложу - он уже вставлен в исходники. Пока программа состоит из главного окна, в котором лейблом показывается "соединено" или "не соединено". Давайте подумаем над организацией работы самого ограничителя - первый вопрос "Где хранить данные? (Реестр, INI, СУБД)", второй - "Шифровать их или нет? (True или False)". Остальное потом...

Добавлено:
А вот и кусок кода, отвечающий за проверку наличия интернет-соединения:

Код: function IsConnectedToInternet: Boolean;
var dwConnectionTypes: DWORD;
begin
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;
Автор: Shurshunchik007
Дата сообщения: 02.06.2005 23:44
Предлагаю использовать реестр! Закадируем и тогда можно свободно статистику вести без боязни потери данных (естественно надо "правильно" закодировать)! Кроме того легко блокираторы ставить на программы, которые сами могут соединение установить (без отдельных модулей)!
Конечно хорошо использовать метод на основе InternetGetConnectedState, но может понадобится метод на основе GetSystemMetrics для проверки "наличии сети".

Код:
function IsInternetConnected: Boolean;
begin
Result := GetSystemMetrics(SM_NETWORK) and 1 > 0;
end;
Автор: Ontarion
Дата сообщения: 03.06.2005 11:14
GetSystemMetrics, к сожалению, совершенно не работает, в отличии от предыдущей функции. Он постоянно выдаёт True. Возможно он получает инфу и о интернете и о локалке - нам такого не надо. Самое главное для нас - реализовать отсчёт времени, ведение и хранение статистики подключений. Наш пример для подражания и конкурент, которого надо обойти - это программа StatistXP (http://m-kirill.hotbox.ru/news.htm ), а также совсем небольшая бесплатная утилитка, считающая время Internet Timer (http://boalse.narod.ru/Delphi.htm). Нам надо реализовать что-то подобное. После просмотра программ пишите свои предложения по поводу "Ограничителя интернета". Пока всё...
Автор: mr_eoi
Дата сообщения: 03.06.2005 15:58
Ontarion
По поводу кусочка кода для определения интернет соединения:
1. Первый параметр функции InternetGetConnectedState заявлен разработчиками (см. MSDN) как out (в него заносится тип соединения), следовательно присваивать ему ничего не следует.
2. Функция InternetGetConnectedState достоверно определяет лишь соединение с ISP и то лишь по RAS (dial-up). Достоверно определить наличие соединения с интернет можно лишь пропинговав какой-либо сервер в глобальной сети. Можно воспользоваться, к примеру, функцией InternetCheckConnection.
Автор: Ontarion
Дата сообщения: 03.06.2005 20:56
Так ведь наша программа и будет работать с dial-up. Именно его пользователю и надо ограничивать.
Автор: Raamzai
Дата сообщения: 03.06.2005 21:30

Цитата:
GetSystemMetrics, к сожалению, совершенно не работает, в отличии от предыдущей функции. Он постоянно выдаёт True. Возможно он получает инфу и о интернете и о локалке - нам такого не надо. Самое главное для нас -

Яже писал что сталкивался с такой проблемой раньше. Поэтому лучший способ узнать есть-ли у тебя интернет - это маршрут на 0.0.0.0
Автор: Shurshunchik007
Дата сообщения: 03.06.2005 22:12
Люди! А зачем нам запрашивать на существование соединения? Ведь можно прямо из реестра смотреть (вы уж извените за такую "любовь" к реестру). А если постараться, то, по идеи, можно проверку на необходимость такой программы, на каком-то отдельном компьютере, сделать (ну и сообщать пользователю об этом).


Цитата:
Предлагаю использовать реестр!

Это я погоречился... в СУБД свои плюсы есть... но вообще можно сделать запрос на выбор пользователя...

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

Ontarion
Извини, но ты не прав... Полно случаев когда необходимо ограничивать не RAS...
И было бы гораздо лучше если программа могла работать и с остальными соединениями...

Raamzai
А ничего так кодочек работает...
Автор: Raamzai
Дата сообщения: 03.06.2005 22:53
С реестром лучше не звязываться потаму что не все под правами админов ходят. Новая фича это xml или xls
Автор: Shurshunchik007
Дата сообщения: 03.06.2005 23:03
Raamzai
Сори! Что-то даже сразу не сообразил!
Про использаование реестра как хранилища - это да...
Но все равно можно сделать запрос на выбор пользователя ... с подробным описанием возможностей...
А читать из реестра никто в роде не заприщает... Или меня глючит уже?
Автор: Raamzai
Дата сообщения: 03.06.2005 23:05
Shurshunchik007
Ты успел до моего исправления или сам догадался как запустить?

Добавлено:

Цитата:
А читать из реестра никто в роде не заприщает...
Бывает что ни читать ни писать в реестр неможешь. Ну это в сети с доменом или админом.
Автор: Shurshunchik007
Дата сообщения: 03.06.2005 23:42
Raamzai

Цитата:
Ты успел до моего исправления или сам догадался как запустить?

Ты меня за кого считаешь?

Цитата:
Бывает что ни читать ни писать в реестр неможешь. Ну это в сети с доменом или админом.

Ну что, тогда другого выхода получается, что и нет... А INI вообще, я бы сказал, не надежные... Ну вот... Жалко...
Автор: CamTracer
Дата сообщения: 04.06.2005 08:10
Dimonka

Цитата:
Цитата:Тогда уж bDebil. А то запутаешься)

Тебе советую почитать следующий документ:
http://community.borland.com/article/0,1410,10280,00.html
Не надо путать людей!


Не думаю, что кто-либо, кроме тебя воспринял это дело серьезно.
А за заботу спасибо, всегда приятно, когда кто-то о тебе заботится) Чуть не стал умнее на целый документ. Почему "чуть"? Ну потому что cpp и с# рулят. И переходить с них на паскаль точно не собираюсь...
Автор: Ontarion
Дата сообщения: 04.06.2005 09:32
Действительно - с реестром могут возникнуть большие проблемы (но некоторые настройки будем туда сохранять), а INI файл я просто написал - для разнообразия (в нём будем хранить только языки, т.к. наша программа будет мультиязыковой). Теперь надо подобрать самый функциональный код проверки соединения и подумать над механизмом работы и интерфейсом. Советую для примера всё же посмотреть те программы, о которых я говорил. Пока всё...
Автор: Shurshunchik007
Дата сообщения: 04.06.2005 13:42
Ontarion

Цитата:
...и подумать над механизмом работы и интерфейсом

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

Цитата:
но некоторые настройки будем туда сохранять

Хорошо! Но раз действительно может быть проблема с правами доступа, то тогда может стоит сделать механизм, который будет определять возможность использования реестра, и в зависимости от этого хранить настройки либо в реестре, либо в ... даже в тех же INI...
Автор: evle
Дата сообщения: 04.06.2005 14:50
Вмешаюсь немного по поводу реестра. У пользователя почти гарантировано есть право чтения и записи для ветки HKEY_CURRENT_USER, туда MS и рекомендует писать настройки всех программ. Для того чтобы пользоваться остальными ветками необходимы весомые основания, потому как на запись они доступны только администраторам.
Автор: seevkaboorka
Дата сообщения: 04.06.2005 15:12
думаю срзу надо забить на реестр. мс сами на него делают ппытки забить. ini выход. можно их сохранять в гарантированное на запись место - папка профиля.
Автор: Ontarion
Дата сообщения: 04.06.2005 16:45
Шуршунчик007
Интерфейс есть именно часть программы, посредством которой пользователь обращается к операциям, а не сама операция. Я думаю с этим понятно. Только я чешу голову и думаю - как реализованы таблицы в тех программах, которые я давал. СУБД это или просто табличка?
Вообщем нам надо подумать, как реализовать такое же, а потом добавить возможности, которые выделят нашу программу (на самом деле программ такого типа совсем немного, а ограничивать умеет лишь одна, да и то только в рублях).
Сивкабурка
Очень интересная идея - папка профиля. Это ведь всё решает! Я пошёл думать...

P.S. Пишите всё, что думаете - нам нужны идеи и предложения, а самое главное ПОСМОТРИТЕ ТЕ ПРОГРАММЫ, КОТОРЫЕ Я ДАВАЛ И РАССКАЖИТЕ О СВОИХ ИДЕЯХ ПО РЕАЛИЗАЦИИ ТАКОГО ЖЕ
Автор: Shurshunchik007
Дата сообщения: 04.06.2005 21:24
Ontarion

Цитата:
Интерфейс есть именно часть программы, посредством которой пользователь обращается к операциям...

Вот именно... часть программы... а про операции я ничего не говорил. Только это определение говорит о пользовательском интерфейсе. А я спрашивал про интерфейс программы вообще! То есть про правила работы программы с програмным обеспечением вообще, и отдельных ее процедур между собой!

P.S. Я Shurshunchik007, а не
Цитата:
Шуршунчик007


Автор: Ontarion
Дата сообщения: 04.06.2005 21:32
Под "операциями" я подразумевал "механизм работы", который ты сопоставил с интерфейсом.

Впадлу просто переключать раскладку в Линуксе (опять впадлу), поэтому и пишу кириллицей. Лучше бы прочли постскриптум в моём предыдущем сообщении.
Автор: Shurshunchik007
Дата сообщения: 04.06.2005 21:41
Ontarion

Цитата:
Под "операциями" я подразумевал "механизм работы"...

Хорошо подразумевали... совершенно разные вещи...
Ладно предлагаю закончить этот спор - все равно друг друга не убедим в своей правоте...
Так что я смотрю программы...

P.S. Что насчет не RAS соединений?

Автор: Ontarion
Дата сообщения: 04.06.2005 22:27

Цитата:
Что насчет не RAS соединений?

Если знаешь, то дерзай! Какое средство ты предложишь?
Автор: dneprcomp
Дата сообщения: 05.06.2005 05:17
Ontarion
А ты не переключай "раскладку в Линуксе ". Ты просто кликни на имени того, к кому обращаешься.
Автор: TheChampion
Дата сообщения: 05.06.2005 08:04
Ontarion

Цитата:
Впадлу просто переключать раскладку в Линуксе

Посмотрите, кто тут у нас --- типа крутой кодер. Типа в Linux. И типа с, прости Господи, дельфи
Автор: mr_eoi
Дата сообщения: 05.06.2005 09:19
TheChampion
09:04 05-06-2005
Цитата:
Типа в Linux. И типа с, просто Господи, дельфи

А может он на Kylix программирует.
Автор: Ontarion
Дата сообщения: 05.06.2005 09:56
Опять не по теме! Программирую я на Delphi в Windows XP, хотя у меня стоит 30-дневная триалка Kylix 3 в моей Fedora Core 2.
Автор: Ontarion
Дата сообщения: 05.06.2005 17:46
А вот и ещё одна проблемка - ведь диалап-соединений у пользователя может быть больше одного. Например у моего провайдера есть ещё и гостевой вход в течении 10 минут с паролем guest. Наша программа будет всё считать за одно соединение и по одному тарифу.
Автор: mr_eoi
Дата сообщения: 05.06.2005 18:38
Ontarion
18:46 05-06-2005
Цитата:
А вот и ещё одна проблемка - ведь диалап-соединений у пользователя может быть больше одного. Например у моего провайдера есть ещё и гостевой вход в течении 10 минут с паролем guest. Наша программа будет всё считать за одно соединение и по одному тарифу.

Значит от RAS API никуда не деться.

Добавлено:
Интерфейсный модуль RAS.pas берём здесь
Автор: Shurshunchik007
Дата сообщения: 05.06.2005 20:28
Ontarion

Цитата:
Какое средство ты предложишь?

На тему сооединения ВООБЩЕ предлагаю использовать...

Цитата:

function CheckWithUrl(URL:string):boolean;
var
hSession,hFile: hInternet;
dwNumber,dwCodLent: dword;
dwCode: array [1..20] of char;
res: pchar;
begin
Result:= false;
if URL = '' then exit;
hSession:= InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil, 0);
if assigned(hSession) then
begin
hFile:= InternetOpenUrl(hSession,pchar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
dwNumber:= 0;
dwCodLent:= 10;
HttpQueryInfo(hFile,HTTP_QUERY_STATUS_CODE,@dwCode,dwCodLent,dwNumber);
res:= pchar(@dwCode);
result:= (res ='200') or (res ='302');
if assigned(hFile) then InternetCloseHandle(hFile);
InternetCloseHandle(hSession);
end;
end;

Вот! У меня работает замечательно!!!

Цитата:
А вот и ещё одна проблемка - ведь диалап-соединений у пользователя может быть больше одного. Например у моего провайдера есть ещё и гостевой вход в течении 10 минут с паролем guest.

А по подробней можно?

Страницы: 1234

Предыдущая тема: Как отредактировать базу в *.GDB формате


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.