Здравствуйте _эксперты_! Вот смотрю и дивлюсь в последнее время... В вашем полку появились так называемые "эксперты", которые мало того, что ленятся мануал почитать перед ответом, но и еще отвечают типа "ну ты узнаешь, мне обязательно напиши". А про грамотность я вообще молчу... Ашипка на ашипки. :(( Грустно все это, друзья.. Видимо, пора как то модерировать рассылку. Так как дезинформация еще хуже отсутствия ответа. Дабы не вводить всех в заблуждение, назову поименно (пусть не обижаются) - это _Stein и BOLT_. Ну и еще один есть на примете.. Я обращаюсь как раз именно к _вам_. Вы хоть мануалы документацию читайте перед ответом, если не знаете. А когда отвечаете - то отвечайте конкретно и по существу. И так уже над вашим бредом большинство читателей рассылки живот надрывает. И берите
пример с Золотых Экспертов - Balder'a и Артема Шегеды. Кого забыл - сорри - давно не появлялись ;) Ежели совсем полный аут, то лучше уйдите временно со сцены. А когда соответствующие знания наберете - тогда и пробуйте себя. Надеюсь, я никого не обидел, но критика была об'ективной. -- Читатель рассылки.
Да, про модерацию это верно, я сам под другим ником еще давно вопросы задавал, так иногда такие ответы приходят, что уши вянут... Ответ отправлен: 26.05.2003, 22:19 Отправитель: [MozgC] Отвечает baldr
Приветствую Вас, Читатель рассылки! О-о, да! Все было объективно! :))) Мне понравилось. :) А если серьезно, то это беда всех рассылок... Но лично я не вижу пока никаких способов модерировать рассылку. Если выделять кого-то одного, кто будет выбирать хорошие ответы, то рассылка будет зависеть только от этого человека, да и у него свободное время резко уменьшится... Посмотрим, как дальше будет... :-/ Хотя, IMHO, надо как-то проверять новых экспертов.. Что-то типа испытательного срока... Ответ отправлен: 27.05.2003, 08:34 Отправитель: baldr Отвечает Дима Мусиенко
Приветствую Вас, Читатель рассылки! Вам сюда -> http://rusfaq.ru/cgi-bin/Forum.cgi?Action=ShowOpin&Number=55&Forums=All&Qty=25&From=661&Sort=
Ответ отправлен: 27.05.2003, 10:37 Отправитель: Дима Мусиенко Отвечает BOLT
Добрый день, "Читатель рассылки"! Отвечаю по порядку: 1)Укажите мне пожалуйста где я написал такое "ну ты узнаешь, мне обязательно напиши". 2)Я вообще-то не обижаюсь.Сам знаешь кто обижается... 3)Если я пишу неграмотно, то прошу простить читателей меня, времени не хватает!Сам посмотри как ты "грамотно" пишешь, не буду указывать - читатель сам найдет. 4)Документацию я читаю непрерывно.Может прислать список? :з) 5)Тебе не решать: кому уходить, а кому оставаться.Это решает администратор рассылки - Калашников О.А.Все жалобы, пожалуйста к нему! 6)И вообще кто ты такой.Может раскроешь секрет, "Читатель рассылки".Все претензии прошу писать мне лично(ICQ:221362829), а не в рассылку(нефиг базар устраивать) или жаловаться администратору и приводить доказательства. Счастливо оставаться! P.S. Не
люблю крыс! Ответ отправлен: 27.05.2003, 17:09 Отправитель: BOLT Отвечает Stein
1. Рот закрой, человек плохой, я школу закончил с медалью, так что про грамотность - помолчи. Если есть базар - мне похеру, пусть меня удаляют, но с тобой встречусь. 2. Укажи, ГДЕ И ЧТО я неверно написал. А про мануалы - тоже рот закрой. Если читатель не знает англицкого - его проблемы, но я, по мере возможности, отсылаю и МАНУАЛЫ и ИСХОДНИКИ(так я тут недавно, то только одному отослал про DirectX, но не всё, так как занимало всё это дело более 8 метров, ещё я ему книгу посоветовал), а ещё Satany: по-моему один отправил про сортировку. 3. ЧЕГО, крыс, не назвался и сам не пишешь и не ОПРОТЕСТОВЫВАЕШЬ ответы. Я вообще - сам всему учился и на счёт Delphi - прошу тебя помолчать! 4. Ты вообще кто такой, чтобы чего - то решать?! Пишешь лажу всякую не втему! PS Приношу извинения, если Ашибок понаделал, я понимаю, что не надо их делать, но программист - не
филолог и т.п. Также извиняюсь за брань. PPS Кстати, я серьёзно про базар - ты на меня наехал, отвечать тебе придётся, если не тёлка, так что жду в Самаре. Я не из тех, с кем такой гнилой базар проходит. Говорю ещё раз - если уж удалите - ваше дело, господин администратор... PPPPS А про "ну ты если узнаешь" - а ты мне ДАЙ ССЫЛКУ, где есть СВОБОДНЫЙ ХОРОШИЙ МАНУАЛ ПО СОКЕТАМ ДЛЯ DELPHI!?!?!? PPPS Если захочешь проверить - пжалста. Плохого тебе дня, ОНАНИм.
Ответ отправлен: 27.05.2003, 17:37 Отправитель: Stein
Вопрос № 669
Извините за ламерский вопрос, но как в Delphi из программы установить Label точно по середине по горизонтали?
Label1.Left:=round((Form1.Width-Label1.Width)/2); Или можно без ф-ии round, точно не помню =) Ответ отправлен: 26.05.2003, 20:44 Отправитель: [MozgC] Отвечает Артём Шегеда
Добрый день, Student!
with Label1.Parent do with Canvas.TextExtent(Label1.Caption) do begin Label1.Top := (ClientHeight-cy) div 2; Label1.Left := (ClientWidth-cx) div 2; end;
Ответ отправлен: 26.05.2003, 20:57 Отправитель: Артём Шегеда Отвечает Vdr
Доброе время суток, Student! Label1->Left=Form1->Width/2-Label1->Width/2; Суть в том, что Left - это положение верхнего-левого угла компонента относительно левого края формы. А Width - ширина. Удачи!
Ответ отправлен: 27.05.2003, 10:42 Отправитель: Vdr Отвечает BOLT
Добрый день, Student! Пишешь код: Label1.Top := Top div 2; Label1.Left := (Left div 2)-(Label1.Width div 2); Счастливо! Ответ отправлен: 27.05.2003, 17:21 Отправитель: BOLT Отвечает Stein
Доброе время суток, Student! См ниже... Успехов...
Приложение: Ответ отправлен: 27.05.2003, 18:04 Отправитель: Stein
Вопрос № 670
Это опять я! Если не трудно, еще вопросик: А как из программы поменять цвет Label'a? Извините за ламерские вопросы.
Вообще-то Label1.Font.Color:=clRed; но никто тебя тут полностью не будет учить Delphi, ok ? Намек понят? Ответ отправлен: 26.05.2003, 21:20 Отправитель: [MozgC] Отвечает Артём Шегеда
Здравствуйте, Student!
Н-да..., студент, документацию ты не любишь... Label1.Font.Color := clRed; Ответ отправлен: 26.05.2003, 21:28 Отправитель: Артём Шегеда Отвечает Vdr
Здравствуйте, Student! Label1->Font->Color=clYellow; Названия переменных для цветов смотри в хелпе кури TColor type удачи! Ответ отправлен: 27.05.2003, 10:34 Отправитель: Vdr Отвечает BOLT
Добрый день, Student! Пишешь код: Label1.Font.Color = clRed;(или 0xAAFFCC -числом) Счастливо! Ответ отправлен: 27.05.2003, 17:16 Отправитель: BOLT Отвечает Stein
Приветствую Вас, Student! Поменять цвет - Label1.Color:=clRed; Где clRed - красный цвет(тип TColor). Ответ отправлен: 27.05.2003, 17:57 Отправитель: Stein
Вопрос № 671
Доброго времени суток, Эксперты. Я из рассылки по ассемблеру - там мне не помогли. Я делаю программу KeyLogger(через dll). Но она перехватывает только свои клавиши, а должна перехватывать клавиши, нажатые в других приложениях. Есть ли среди вас тот, кто сможет мне помочь? Если есть - давайте свой e-mail, я вышлю программу(UUE в приложении не могу, т.к. RusFaq ругается, что большой размер). Помогите!!!
Доброе время суток, URiS (newff.narod.ru)! Отослал... Если помогло - напиши stein@fromru.com Ответ отправлен: 27.05.2003, 17:48 Отправитель: Stein Отвечает Илья
Доброе время суток, URiS (newff.narod.ru)! Если для win2000 и старше, то возможно помогу. Для 2000 можно пробовать запустить сервисом или драйвером. Устраивает - поговорим. b.i@date.by Ответ отправлен: 27.05.2003, 18:13 Отправитель: Илья Отвечает [MozgC]
Я 100% видел исходник как раз того , что тебе надо в инете, было недавноотносительно. Это я к тому, чтобы ты поискал в поисковиках просто. Я думаю найдешь, раз я натыкался Ответ отправлен: 27.05.2003, 20:56 Отправитель: [MozgC] Отвечает Артём Шегеда
Добрый день, URiS (newff.narod.ru)!
Отправил пример программы. Она, по большей части, справляется с поставленной задачей. Кромсай её как хочешь. Помни главное правило: библиотека с обработчиком событий клавиатуры должна быть доступна всем приложениям - поэтому её желательно поместить её куда-нить в c:\windows\system
В архиве есть компонента - ArtTrayIcon. Можешь установить её или воспользоваться тем, что есть в твоём арсенале.
Посмотри на RusFAQ.ru среди ответов - я уже отвечал на такой вопрос. Ответ отправлен: 28.05.2003, 12:53 Отправитель: Артём Шегеда
Вопрос № 672
Здравствуйте, уважаемые эксперты! У меня есть к вам 2 вопроса: 1)Как мне узнать, висит ли кто-либо на данном IP или нет. 2)Как организовать поток в приложении и как передать параметр этому потоку?(если можно по-подробней)
Добрый день, Byter! -----------Из конференции--------------- Новые потоки в Delphi более разносторонние, чем в BP7. Поскольку вы знаете как пользоваться потоками в BP7, а размер статьи ограничен, то я думаю, что для начала вам необходимо попробовать в действии описанный ниже модуль, инкапсулирующий класс для работы с потоками в стиле BP7. Класс является наследником TComponent, но в нашем случае не было бы никакой разницы, если бы он был наследником TObject. К примеру, вы могли бы адаптировать данный код к своему наследнику TList. Более важен тот факт, что вы можете использовать поток так, как вам это необходимо, исходя из вашей задачи и специфики. Я сделал работу потока похожую по стилю на BP7, где вначале идет ID класса. В каком-нибудь месте вам необходимо вызвать RegisterType( TYourClass, UniqueIDLikeBP7 ), после чего TYourClass готов к работе с потоками. Вы
наверняка обратили внимание, что я реализовал список зарегистрированных классов (регистратор), где с помощью ID легко можно найти классы, читающие и пишущие в поток в момент вызова конструктора Load соответствующего класса. Код простой и не требующий пояснений. Имейте в виду, что данный код можно использовать для организации передачи данных между существующим файловым потоком BP7 в объекты Delphi - я создал это для осуществления миграции с текущего приложения BP7 в Delphi и осуществления совместимости. Если вам необходима более подробная информацио о работе потоков в Delphi, обратитесь к соответствующему разделу электронной справки Delphi. Успехов. ------------------------
Приложение: Ответ отправлен: 27.05.2003, 17:47 Отправитель: Stein Отвечает baldr
Добрый день, Byter! 1. Посмотри номер порта службы ping и отправь туда запрос. Правда, ответ придет только если комп на этом IP активен... Ответ отправлен: 28.05.2003, 08:28 Отправитель: baldr Отвечает Артём Шегеда
Приветствую Вас, Byter!
1. baldr уже ответил. (в дополнение) Комп может не ответить, если стоит firewall или канал до хоста перегружен. 2. Эксперт Stein, конечно, наворотил... В Delphi VCL есть прообраз потока - класс TThread. От него создавай свой класс-потомок, в котором переопределяй функцию Execute. Обязательно почитай справку - там есть вполне приличные примеры. Никогда не вызывай процедуры, которые может использовать форма, напрямую - обязательно используй функцию Syncronize. Очень удобно пользоваться сообщениями (PostMessage) для передачи данных между потоком и формой Ответ отправлен: 28.05.2003, 12:42 Отправитель: Артём Шегеда
Вопрос № 673
Привет эксперты!!! подскажите пожалуйста как юзать функцию RegOpenKey у нее три параметра: HKEY: hkey //hadle of open key LPCTSTR: ipsubkey //addres of name of subkey to open PHKEY: phkResult //addres of handle of open key что должно быть в третьем параметре?? thank...
Здравствуйте, snake! В этот параметр записывается Handle ключа, который ты открыл в переменную типа Pointer(указатель на него). А вообще про эти функции: Функции API RegCreateKey (Key:HKey; SubKey: PChar; var Result: HKey): Longint; Создать подраздел в реестре. Key указывает на "корневой" раздел реестра, в Delphi1 доступен только один - HKEY_CLASSES_ROOT, в в Delphi3 - все. SubKey - имя раздела - строится по принципу пути к файлу в DOS (пример subkey1subkey2 ...). Если такой раздел уже существует, то он открывается (в любом случае при успешном вызове Result содержит Handle на раздел). Об успешности вызова судят по возвращаемому значению, если ERROR_SUCCESS, то успешно, если иное - ошибка. RegOpenKey(Key: HKey; SubKey: PChar; var Result: HKey):Longint; Открыть подраздел KeySubKey и возвращает Handle на него в переменной Result. Если раздела
с таким именем нет, то он не создается. Возврат - код ошибки или ERROR_SUCCESS, если успешно. RegCloseKey(Key: HKey): Longint; Закрывает раздел, на который ссылается Key. Возврат - код ошибки или ERROR_SUCCESS, если успешно. RegDeleteKey(Key: HKey; SubKey: PChar): Longint; Удалить подраздел KeySubKey. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок. RegEnumKey(Key:HKey; index: Longint; Buffer: PChar;cb: Longint):Longint; Получить имена всех подразделов раздела Key, где Key - Handle на открытый или созданный раздел (см. RegCreateKey и RegOpenKey), Buffer - указатель на буфер, cb - размер буфера, index - индекс, должен быть равен 0 при первом вызове RegEnumKey. Типичное использование - в цикле While, где index увеличивается до тех пор, пока очередной вызов RegEnumKey не завершится ошибкой (см. пример). RegQueryValue(Key: HKey; SubKey: PChar; Value: PChar; var
cb: Longint): Longint; Возвращает текстовую строку, связанную с ключом KeySubKey.Value - буфер для строки; cb- размер, на входе - размер буфера, на выходе - длина возвращаемой строки. Возврат - код ошибки. RegSetValue(Key: HKey; SubKey: PChar; ValType: Longint; Value: PChar; cb: Longint): Longint; Задать новое значение ключу KeySubKey, ValType - тип задаваемой переменной, Value - буфер для переменной, cb - размер буфера. В Windows 3.1 допустимо только Value=REG_SZ. Возврат - код ошибки или ERROR_SUCCESS, если нет ошибок. RegDeleteValue(HKEY hKey, LPCTSTR lpValueName ); Удаляет значение lpValueName находящееся в ключе hKey.hKey должен был быть открыт с доступом KEY_SET_VALUE процедурой RegOpenKey.Возвращает ERROR_SUCCESS если успешно. LONG RegEnumValue( HKEY hKey, DWORD dwIndex,LPTSTR lpValueName,LPDWORD lpcbValueName,LPDWORD lpReserved,LPDWORD lpType, LPBYTE lpData, LPDWORD
lpcbData ); , Выдает список значений у ключа hKey, dwIndex-этот параметр должен быть 0 при первом вызове, а далее по анологии с RegEnumKey(т.е. можно использовать в цикле), lpValueName-буфер для названия значения, lpcbValueName-размер lpValueName, lpReserved должно быть всегда 0, lpType-буфер для названия типа (int), lpData- буфер для данных, lpcbData-размер для lpData. Примечание: При каждой новом вызове функции после предыдущего нужно заново переназначить lpcbValueName. ( lpcbValueName=sizeof lpValueName) Иногда параметр lpcbData -должно обязательно иметь значение
Приложение: Ответ отправлен: 29.05.2003, 13:29 Отправитель: Stein Отвечает BOLT
Доброе время суток, snake! Вот так и юзать: PHKEY phkResult; RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", &phkResult);
Я так понял - ты начинающий программист(проффесионал таких вопросов не задает) и ты программируешь в C++ Builder / Delphi(раз вопрос прислан в рассылку "C++ Builder / Delphi"), тогда я тебе советую использовать класс для работы с системным реестром TRegistry - это намного проще, чем мучаться с API. Счастливо! Ответ отправлен: 29.05.2003, 17:54 Отправитель: BOLT Отвечает [MozgC]
// переменные int iLen; char szLevelName[256]; HKEY hKey; if (RegOpenKey(HKEY_CURRENT_USER,"SOFTWARE\Fisher\VisualEditor",&hKey)) { // обработка ошибки MessageBox(NULL,"Could not open the registry key.","Registry",MB_ICONSTOP); } if (RegQueryValueEx(hKey,"Last level",0,NULL,NULL,(unsigned long *)&iLen)) { // обработка ошибки MessageBox(NULL,"Could not query the value.","Registry",MB_ICONSTOP); } if (RegQueryValueEx(hKey,"Last level",0,NULL,(unsigned char *)szLevelName,(unsigned long *)&iLen)) { // обработка ошибки MessageBox(NULL,"Could not query the value.","Registry",MB_ICONSTOP); } RegCloseKey(hKey); Ответ отправлен: 28.05.2003, 14:21 Отправитель: [MozgC]
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.