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

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


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

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

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

Выпуск № 279
от 29.10.2005, 17:51

Администратор:Калашников О.А.
В рассылке:Подписчиков: 258, Экспертов: 45
В номере:Вопросов: 6, Ответов: 23


Вопрос № 28181: Прива, глубокоуважаемые эксперты! Как можно узнать имя пользователя, запустившего мою прогу? Если нельзя никак, то как узнать имя компьютера?...
Вопрос № 28185: Подскажите, пожалуйста, как гаранированно очистить экран от canvas? Причём не заполнить всё одним цветом, а вообще убрать все следы от рисования текста на экране?...
Вопрос № 28189: Обьясните, пожалйста, какие именно параметры нужно передавать функциям GetUserName и GetComputerName...
Вопрос № 28211: у меня на форме есть listbox, кнопка добавить и на другой форме компонент webbrowser нужно релизовать: 1. когда пользователь добавит в lisbox ссылки программа будет фильтровать введёный адрес в браузере? (желательно код) 2. и во что лучше со...
Вопрос № 28223: Здравствуйте уважаемые эксперты! Вопрос в следующем: нужен компонент DBGrid или простой Grid, чтобы он умел делать многоуровневые заголовки столбцов, выводить итоги по столбцам, подсветка строк, сортировка по столбцам. Первые два параметра крайне...
Вопрос № 28236: Здравствуйте, уважаемые эксперты. Столкнулся с проблемой: нужно сделать паузу в программе (задержку как раньше было delay ). Не могу найти как ее сделать в Delphi. Подскажите. Спасибо за ответы....

Вопрос № 28.181
Прива, глубокоуважаемые эксперты! Как можно узнать имя пользователя, запустившего мою прогу?
Если нельзя никак, то как узнать имя компьютера?
Отправлен: 23.10.2005, 18:14
Вопрос задал: Segor (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Bob Johnson
Здравствуйте, Segor!
GetUserName - имя пользователя.
GetComputerName - имя компьютера.
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 23.10.2005, 18:46

Отвечает: sir henry
Здравствуйте, Segor!
Получить имя пользователя можно с помощью функции GetUserName(). Она даст правильный результат, если только программа не запущена от другого пользователя (так тоже можно).
Точно так-же есть и функция для определения имени компьютера - GetComputerName().
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 23.10.2005, 19:24

Отвечает: Ерёмин Андрей
Здравствуйте, Segor!
Для работы приведённого кода, поместите на форму Label1 и Label2.

var Size: Cardinal; PRes: PChar; BRes: Boolean;
lpSystemInfo : TSystemInfo;
begin
// Имя компьютера
Size := MAX_COMPUTERNAME_LENGTH + 1;
PRes := StrAlloc(Size);
BRes := GetComputerName(PRes, Size);
if BRes then Label1.Caption := 'Имя компьютера: ' + StrPas(PRes);

// Имя пользователя
Size := MAX_COMPUTERNAME_LENGTH + 1;
PRes := StrAlloc(Size);
BRes := GetUserName(PRes, Size);
if BRes then Label2.Caption := 'Имя пользователя: ' + StrPas(PRes);

---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 23.10.2005, 20:52


Вопрос № 28.185
Подскажите, пожалуйста, как гаранированно очистить экран от canvas? Причём не заполнить всё одним цветом, а вообще убрать все следы от рисования текста на экране?
Отправлен: 23.10.2005, 19:21
Вопрос задал: Segor (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Delphin
Здравствуйте, Segor!
PatBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight, WHITENESS);
---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 23.10.2005, 19:37

Отвечает: Petya-kurochkin
Здравствуйте, Segor!
InvalidateRect(0,nil,False);
---------
Всех порву! Всех побью! Но если можно убегу!
Ответ отправил: Petya-kurochkin (статус: 2-ой класс)
Отправлен: 23.10.2005, 19:42

Отвечает: sir henry
Здравствуйте, Segor!
Как раз очищение - это и есть заполнить одним цветом. Никаких следов не останется. :)
Если Вам не нравится заполнение цветом, то можно предложить:
InvalidateRect(Canvas.Handle, NIL, True);
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 24.10.2005, 06:44

Отвечает: Маренич Владимир
Здравствуйте, Segor!
Так не бывает:) Технология винды подразумевает самостоятельную прорисовку всех окон, т.е. каждое окно рисует само себя при обработке соответствующих сообщений. Поэтому, если Вы хотите чтобы ваше окно выглядело как-то иначе нужно соответственно его и рисовать. Инициализация (очистка) области рисования выполняется методом TCanvas.Clear, который вызывает соотв. функцию Windows API, но она как раз и закрашивает всё одним цветом. Если Вы хотите НИЧЕГО не показвать, то ничего не рисуйте в Paint методе. Хотя из вопроса не известно на каком компоненте (форме) Вы рисуете. Уточните, что Вы подразумеваете под "очистить экран от canvas".
Ответ отправил: Маренич Владимир (статус: 3-ий класс)
Отправлен: 24.10.2005, 10:42


Вопрос № 28.189
Обьясните, пожалйста, какие именно параметры нужно передавать функциям GetUserName и GetComputerName
Отправлен: 23.10.2005, 20:43
Вопрос задал: Segor (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Segor!
Вот пример:
var
s: PAnsiChar;
c: PAnsiChar;
i: Cardinal;
begin
s := AllocMem(255);
c := AllocMem(255);
i:=255;
GetUserName(s, i);
GetComputerName(c, i);

ShowMessage('User:'+StrPas(s)+', Computer:' + StrPas(c));
end;

Если что неясно - пиши.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 23.10.2005, 20:56

Отвечает: Ерёмин Андрей
Здравствуйте, Segor!
Смотрите мой ответ на вопрос 28181. Там я привёл конкретный исходник.
---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 23.10.2005, 21:34

Отвечает: sir henry
Здравствуйте, Segor!
И там и там, первым параметром идет переменная типа PChar - туда винда засунет имя, вторым параметром - размер этой самой переменной DWORD, т.к. место под нее будет выделятся динамически по тому размеру, который Вы зададите.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 24.10.2005, 06:49


Вопрос № 28.211
у меня на форме есть listbox, кнопка добавить и на другой форме компонент webbrowser нужно релизовать:
1. когда пользователь добавит в lisbox ссылки программа будет фильтровать введёный адрес в браузере? (желательно код)
2. и во что лучше сохранять все настройки программы?
Отправлен: 24.10.2005, 09:23
Вопрос задал: killer-klod (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, killer-klod!
1. "...программа будет фильтровать введёный адрес в браузере..." - если Вам нетрудно, поясните, что бы это значило.
2. Сохранять можно в реестре, используя для этого класс TRegistry, либо в ini-файле, используя класс TIniFile. Можно просто сохранять в текстовый файл, а потом считывать их с помошью Read.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 24.10.2005, 09:36
Оценка за ответ: 1
Комментарий оценки:
Если не знаете то не надо отвечать на вопрос

Отвечает: Schmak
Здравствуйте, killer-klod!
1. Не совсем понял ка программа будет фильтровать адрес...
2. Для сохранения настроек программ в Delphi есть 3 класса:
1) TIniFile для работы с ini-файлами
2) TRegistry для работы с реестром
3) И промежуточный TRegIniFile для работы с реестром как с ini-файлами
А вообще можно сохранять и в обычный текстовый файл, разделяя настройки некоторым символом-разделителем, не употребляемым в самих настройках (например: символ #1).

Ответ отправил: Schmak (статус: 4-ый класс)
Отправлен: 24.10.2005, 16:46


Вопрос № 28.223
Здравствуйте уважаемые эксперты!
Вопрос в следующем: нужен компонент DBGrid или простой Grid, чтобы он умел делать многоуровневые заголовки столбцов, выводить итоги по столбцам, подсветка строк, сортировка по столбцам. Первые два параметра крайне необходимы. Желательно бесплатный, или с ломалкой. Мож кто ссылочкой поделится, или названием компонента. Заранее огромное спасибо за вашу помощь.
Отправлен: 24.10.2005, 12:21
Вопрос задал: xXx (статус: 5-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, xXx!
Найдите DbGridEh из EhLib этот grid может все перечисленное
http://www.farpost.com/personal/dmitryb/RUS/ehlibrus.exe
Ответ отправил: Werewolf (статус: Студент)
Отправлен: 24.10.2005, 12:29
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое :-)

Отвечает: Маренич Владимир
Здравствуйте, xXx!
Я пользуюсь библиотекой EhLib - там как раз такой DBGrid, который Вас удовлетворит:)
http://www.farpost.com/personal/dmitryb/RUS/ehlibrus.exe
Ответ отправил: Маренич Владимир (статус: 3-ий класс)
Отправлен: 24.10.2005, 12:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое :-)

Отвечает: sir henry
Здравствуйте, xXx!
Например грид из компонентов ehlib (www.ehlib.com).
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 24.10.2005, 15:09

Отвечает: Lector
Здравствуйте, xXx!
Можно twwdbgrid из IPControls.
---------
Хочешь помочь старику - сделай вместо него.
Хочешь помочь новичку - сделай вместе с ним.
Хочешь помочь мастеру - отойди и не мешай,
а хочешь помочь дураку - сам дурак.
Ответ отправил: Lector (статус: 6-ой класс)
Отправлен: 24.10.2005, 15:18

Отвечает: Ballon
Здравствуйте, xXx!

Посмотрите /--------------------------------------------------/
TMS компоненты
---------
Хочу все знать...
Ответ отправил: Ballon (статус: 6-ой класс)
Отправлен: 26.10.2005, 06:38


Вопрос № 28.236
Здравствуйте, уважаемые эксперты.
Столкнулся с проблемой: нужно сделать паузу в программе (задержку как раньше было delay ). Не могу найти как ее сделать в Delphi. Подскажите.
Спасибо за ответы.
Отправлен: 24.10.2005, 17:43
Вопрос задал: Lichkaty Alexander (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Lichkaty Alexander!
Sleep(N); //делает паузу
где N - кол-во миллисекунд
---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Практикант)
Отправлен: 24.10.2005, 17:53
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Lichkaty Alexander!
Функция Sleep(Millisec) замораживает текущий поток на указаное кол-во милисекунд.
Можно из текущего потока приостановить другой поток - SuspendThread(Handle). Это бывает полезно, когда только часть программа, какого-либо процесса, должна быть приостановлена.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 24.10.2005, 17:55
Оценка за ответ: 5

Отвечает: Schmak
Здравствуйте, Lichkaty Alexander!
Вместо delay используйте Sleep(MilliSeconds) и всё заработает :)
Ответ отправил: Schmak (статус: 4-ый класс)
Отправлен: 24.10.2005, 18:08
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, Lichkaty Alexander!
Вот так например:
Sleep(1500);
Application.ProcessMessages;


Но учтите, что в течение этих полтора секунд программа вообще станет мёртвой, т.е. не будет реагировать ни на что - ни на клавиатуру, ни на мышь и т.д. Если хотите, чтобы этого не происходило, можно попробовать делать в цикле несколько задержек, которые в сумме дадут требуемую задержку. В данном примере - можно сделать 5 задержек по 300 миллисекунд.
---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 24.10.2005, 19:15

Отвечает: Маренич Владимир
Здравствуйте, Lichkaty Alexander!
Попробуйте функцию Windows API Sleep(Msec), где Msec - целое число в миллисекундах. Выполняет остановку текущего потока на указанное кол-во миллисекунд.
Ответ отправил: Маренич Владимир (статус: 3-ий класс)
Отправлен: 24.10.2005, 22:44
Оценка за ответ: 5

Отвечает: Ballon
Здравствуйте, Lichkaty Alexander!

Воспользуйтесь процедурой Sleep();
или таймером.
---------
Хочу все знать...
Ответ отправил: Ballon (статус: 6-ой класс)
Отправлен: 26.10.2005, 06:34


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

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

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

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

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


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


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

Rambler's Top100 Яндекс


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

В избранное