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

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


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

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

Выпуск № 662
от 26.11.2006, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 412, Экспертов: 64
В номере:Вопросов: 11, Ответов: 22


Вопрос № 63480: Как узнать температуру процессора?...
Вопрос № 63507: Здравствуйте! Напишите, пожалуйста, пример программы, на чистом API, суть которой в следующем: программка мирно запускается и периодически проверяет систему на наличие окна с именем, скажем myform1, если окно имеется ищет в ней кнопку с текстом '...
Вопрос № 63516: Здравствуйте, уважаемые! Поборов стыд, решил обратиться к вам. Есть таблица *.DB, управляемая Query. Далее DataSource-> DBGrid. Всё, как учили (классически). В DBGrid делаю сортировку с помощью SQL запроса к Query: 'SELECT * FROM Tabl...
Вопрос № 63535: Здраствуйте уважаемые эксперты, помогите пожал мне написать программу для обработки 15 целых чисел: найти количество отрицательных чисел и подсчитать разность положительных чисел. Очень надеюсь на вашу помощь, спасибо....
Вопрос № 63536: Привет. Я студент, мне надо штоб при нажатии кнопки комп выключался (перегружалса, завершал сеанс...), и ищо мне нада узнать имя пользователя. Помогите пожалуста. Пишлите ответ на fg.viktor@rambler.ru...
Вопрос № 63539: Доброго времени суток! К моему вопросу о программе на API. Всё в принципе так, но одно НО! Мне важно узнать активна ли сама кнопка. Программа, которой нужно управлять пока ведёт обработку файлов делает кнопки не активными, именно так я и хочу узн...
Вопрос № 63540: Здравствуйте уважаемые эксперты! Написал программу в которой в элемент Image помещается рисунок (карта) , потом методом канвы LineTo рисуются линии поверх этого рисунка, и результат сохраняется в файл. Пока используются файлы *.BMP все работает замеч...
Вопрос № 63549: Доброго времени суток! Извените за навязчивость. У меня цель узнать активность кнопки, а не формы. Форма всегда остаётся активной. Кнопка "Обработка" на время выполнения программы становится серой- не активной. Вот как узнат...
Вопрос № 63550: Здраствуйте. Как в делфи ввести в массив 15 чисел, но не рандомно, а самому ?...
Вопрос № 63574: Уважаемые эксперты. Не подскажите, как сделать в Delphi 2006, чтобы участок кода компилировался, в Debug версии, а в Release версии этот участок кода не компилировался....
Вопрос № 63599: Уважаемые Эксперты! Нуждаюсь в Вашей помощи. Каким образом программно нажать кнопку "Минимизировать окно"? Если можно, приведите пример. Заранее благодарный....

Вопрос № 63.480
Как узнать температуру процессора?
Отправлен: 20.11.2006, 23:04
Вопрос задал: 3лоумышленник (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, 3лоумышленник!
Вот здесь есть очень интересная статейка по этому поводу:
http://www.megalib.com/books/461/mastering/wmi.htm
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.11.2006, 09:36
Оценка за ответ: 4
Комментарий оценки:
Это не совсем то. Хотелось бы что-нибудь попроще, без навороченных библиотек и СДК. Тем более от M$. К тому же мой опыт программирования научил избегать продуктов "творчества" Майкрософт, предназначенных для программистов (например, COM-технологий, .NET). Т. к. это неизбежно ведёт к тормозам, глючности и гемморою.


Вопрос № 63.507
Здравствуйте!
Напишите, пожалуйста, пример программы, на чистом API, суть которой в следующем: программка мирно запускается и периодически проверяет систему на наличие окна с именем, скажем myform1, если окно имеется ищет в ней кнопку с текстом 'mybutgo', проверяет активна ли эта кнопка, если да нажимает её (после этого кнопка становится не активной). После нажатия кнопки начинает выполнятся программа (myform1), после выполнения кнопки, вновь становятся активными и нужно нажать на кнопочку с надписью 'bnexit'. Если не сложно напишите на Ассемблере или на Delphi, в крайнем случае на C. Буду очень благодарен!.
Заранее огромное спасибо!
Отправлен: 21.11.2006, 07:04
Вопрос задал: Prowler (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Prowler!

В приложении код программы которая болтается в оперативке и ищет окно с заголовком 'Form1' если находит то ищет на этом окне кнопку 'Button1' затем нажимает ее и ищет кнопку 'Button2' когда находит нажимает и ее при условии доступности 'Button1'. Во второй программе на нажатие кнопки 'Button1' происходит следующее
button1.enabled := false;
необходимый код для выполнения
button2.enabled := true;
На нажатие 'Button2' происходит просто form1.close;
Советую использовать в таймере или хотя бы добавить в код Sleep();
иначе система много процессорного времени тратит на эту прогу

Приложение:

---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как

Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 3-ий класс)
Ответ отправлен: 21.11.2006, 11:32
Оценка за ответ: 5


Вопрос № 63.516
Здравствуйте, уважаемые!
Поборов стыд, решил обратиться к вам.
Есть таблица *.DB, управляемая Query. Далее DataSource-> DBGrid. Всё, как учили (классически).
В DBGrid делаю сортировку с помощью SQL запроса к Query: 'SELECT * FROM Table ORDER BY Name'.
С удалением одной записи, выбранной в DBGrid, проблем нет. Запоминаю её индекс, устанавливаю простой SQL запрос, удаляю запись, возвращаюсь к прежнему запросу, перехожу на соседнюю запись в таблице.
Как мне быть, если надо удалить несколько записей, выделенных в DBGrid? Bookmark не спасают, т.к. они действительны только до смены SQL запроса.
Среда D7.

Спасибо.
Отправлен: 21.11.2006, 08:51
Вопрос задал: Zoof (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: sir henry
Здравствуйте, Zoof!
1. У каждой записи в таблице должен быть уникальный идентификатор, поэтому после Выделения строк а Гриде нужно в параметр запроса передать уникальные номера этих записей. Удаление будет происходить с условием что уникальный номер записи будет входить в список тех номеров, что Вы передали в запрос, типа:
DELETE FROM Table1 WHERE id IN (Список_номеров)
2. В SQL более продвинутый и более быстрый способ манипуляции записями, когда они обрабатываются по какому-либо групповому признаку.
Например у Вас есть список сотрудников. Вы выделяете в гриде группу записей и делаете это по признаку, что эти сотрудники уволились. Тогда SQL запрос будет составляться с условием, что дата увольнения в таблице непуста.
3. Бывает так, что нету определенного логического признака, по которым будет происходить выборка записей. Например Вы решили выделить в гриде группу сотрудниц, которые лично Вам симпатичны. :) Тогда можно завести в таблице дополнительное логическое поле (Pometka), куда Вы будете ставить птичку, если запись в Гриде выбрана. Удаление будет выглядеть так:
DELETE FROM Table1 WHERE Pometka
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.11.2006, 09:21


Вопрос № 63.535
Здраствуйте уважаемые эксперты, помогите пожал мне написать программу для обработки 15 целых чисел: найти количество отрицательных чисел и подсчитать разность положительных чисел.
Очень надеюсь на вашу помощь, спасибо.
Отправлен: 21.11.2006, 11:00
Вопрос задал: Никитин Андрей Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: monah
Здравствуйте, Никитин Андрей Валерьевич!

var
i, count, subb, pred:integer;
a:array[1..15] of integer;
begin
count:=0;
pred:=0;
for i:=1 to 15 do
if a[i]<0 then inc(count)
else
begin
if pred=0 then
begin
Pred:=i;
Subb:=a[i];
end else subb:=subb-a[i];
end;
Showmessage('Найдено отрицательных чисел '+inttostr(count)+#10#13+
'Разность положительных чисел равна '+inttostr(Subb));
end;

---------
festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 21.11.2006, 11:20

Отвечает: PaVeL_Ekt
Здравствуйте, Никитин Андрей Валерьевич!

вот пожалуйста !!!

Тока в разности может ошибка быть !!!
(просто я не совсем понял разность м-у какими числами)

но думаю смысел понятен !!!

Приложение:

---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL

Ответ отправил: PaVeL_Ekt (статус: 4-ый класс)
Ответ отправлен: 21.11.2006, 11:21
Оценка за ответ: 5

Отвечает: Sattar
Здравствуйте, Никитин Андрей Валерьевич!
procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..15] of integer;
i,k,j,n:integer;
begin
Randomize;
for i:=1 to 15 do
begin
a[i]:=random(20);
k:=random(3);
if k=2 then a[i]:=a[i]*(-1);
end;
k:=0;
for i:=1 to 15 do
if a[i]<0 then inc(k);
ShowMessage('Відємних чисел '+inttostr(k));
n:=15-k;
k:=0;
For i:=1 to 14 do
For j:=i+1 to 15 do
if a[i]>0 then
if a[i]=a[j] then
inc(k);
showmessage('Знайдено додатніх чисел '+inttostr(n-k));
end;
Ответ отправил: Sattar (статус: 4-ый класс)
Ответ отправлен: 25.11.2006, 14:40


Вопрос № 63.536
Привет. Я студент, мне надо штоб при нажатии кнопки комп выключался (перегружалса, завершал сеанс...), и ищо мне нада узнать имя пользователя. Помогите пожалуста. Пишлите ответ на fg.viktor@rambler.ru
Отправлен: 21.11.2006, 11:39
Вопрос задал: Мельник Виктор (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: monah
Здравствуйте, Мельник Виктор!
По имени пользователя, совсем недавно был вопрос.
Завершение работы для Win NT см. приложение.

Приложение:

---------
festina lente

Ответ отправил: monah (статус: Студент)
Ответ отправлен: 21.11.2006, 11:49

Отвечает: Gh0stik
Здравствуйте, Мельник Виктор!

Вот инетересующие Вас команды:

ExitWindowsEx(EWX_SHUTDOWN,0);//выключение
ExitWindowsEx(EWX_REBOOT,0);//перезагрузка
ExitWindowsEx(EWX_LOGOFF,0);//завершение сеанса.

Как узнать имя пользователя в приложении код функции, которая позволяет это сделать...

Удачи!!!

Приложение:

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.

Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 21.11.2006, 11:55

Отвечает: PaVeL_Ekt
Здравствуйте, Мельник Виктор!

Можно так

winexec(pchar('c:winntsystem32 undll32.exe shell32,Control_RunDLL desk.cpl'),0);

более подробно про функции системных модулей запускаемых с помощью RunDLL32.exe можно прочитать:
http://kerberos666.narod.ru/faq/rundll.htm
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 4-ый класс)
Ответ отправлен: 21.11.2006, 12:30


Вопрос № 63.539
Доброго времени суток!
К моему вопросу о программе на API. Всё в принципе так, но одно НО! Мне важно узнать активна ли сама кнопка. Программа, которой нужно управлять пока ведёт обработку файлов делает кнопки не активными, именно так я и хочу узнать когда программа отработает. После её работы моя прожка ещё много чего должна сделать. Вообще, по сути, это шедуллер для одной конкретной цели!
Отправлен: 21.11.2006, 12:06
Вопрос задал: Prowler (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Prowler!

вот поправка к моему коду
button := findwindowex(form,0,nil,'Button2');
if button <> 0 then begin
if iswindowenabled(findwindowex(form,0,nil,'Form1') then begin
sendmessage(button,bm_click,0,0);
com := false;
end;
end;

---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 3-ий класс)
Ответ отправлен: 21.11.2006, 13:14


Вопрос № 63.540
Здравствуйте уважаемые эксперты! Написал программу в которой в элемент Image помещается рисунок (карта) , потом методом канвы LineTo рисуются линии поверх этого рисунка, и результат сохраняется в файл. Пока используются файлы *.BMP все работает замечательно. Добавил поддержку *.JPG - файлы загружаются в компонент, выгружаются из него, но вся работа с канвой вызывает ошибки. Вопрос: подскажите пожалуйста, что сделать чтобы стала доступна работа с канвой при работе с файлами *.JPG. Как можно преобразовать Graphics в Bitmap для рисования на рисунке, а затем обратно, для сохранения в *.JPG?

Заранее спасибо, Александр.
Отправлен: 21.11.2006, 12:33
Вопрос задал: Shurik_od (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PaVeL_Ekt
Здравствуйте, Shurik_od!

Для преобразования я делал так

Var Img:TBitMap;
begin
Img:=TBitMap.Create;
Img.assign(Image1.Picture.Graphics);

и все в Img находиться Ваша картинка !!!
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 4-ый класс)
Ответ отправлен: 21.11.2006, 12:40
Оценка за ответ: 5

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Shurik_od!
У TJpegImage нет свойства Canvas, напрямую рисовать на нем нельзя. Можно загрузить файл в TJpegImage, затем через буффер программно скопировать его на обычный Image/BitMap и после рисования, через буфер скопировать назад.
В приложении пример кода, взят отсюда, найдено Яндексом

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 21.11.2006, 13:02
Оценка за ответ: 5

Отвечает: monah
Здравствуйте, Shurik_od!
Для работы сохраните jpeg как bmp файл.Как это сделать, смотрите приложение.

Приложение:

---------
festina lente

Ответ отправил: monah (статус: Студент)
Ответ отправлен: 21.11.2006, 15:25
Оценка за ответ: 5


Вопрос № 63.549
Доброго времени суток!
Извените за навязчивость.
У меня цель узнать активность кнопки, а не формы.
Форма всегда остаётся активной. Кнопка "Обработка" на время выполнения программы становится серой- не активной.
Вот как узнать активна ли эта кнопка или нет, имея её дескриптор меня сейчас и интересует.
Отправлен: 21.11.2006, 13:41
Вопрос задал: Prowler (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Prowler!

Внимательно просмотрите код, там проверяется на доступность именно кнопка а не форма

---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 3-ий класс)
Ответ отправлен: 21.11.2006, 14:29


Вопрос № 63.550
Здраствуйте.
Как в делфи ввести в массив 15 чисел, но не рандомно, а самому ?
Отправлен: 21.11.2006, 13:50
Вопрос задал: Никитин Андрей Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: sir henry
Здравствуйте, Никитин Андрей Валерьевич!
1. Можно разместить на форме 15 компонентов типа Edit, занести туда числа, потом, при нажатии на кнопку, считать из них значения в массив.
2. Можно воспользоваться функцией InputBox() и вызывать ее в цикле 15 раз. Будет выскакивать специальное окошко для ввода какого-нибудь значения.
3. Можно поместить все цифры в текстовый файл и считывать их из файла.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.11.2006, 14:16
Оценка за ответ: 3

Отвечает: Мишин Михаил
Здравствуйте, Никитин Андрей Валерьевич!
В приложении самый простой способ:

Приложение:

Ответ отправил: Мишин Михаил (статус: 1-ый класс)
Ответ отправлен: 21.11.2006, 14:16

Отвечает: Писарев, Павел, Юрьевич
Здравствуйте, Никитин Андрей Валерьевич!
Это лучше всего сделать через компанет TStringGrid.
Ответ отправил: Писарев, Павел, Юрьевич (статус: 1-ый класс)
Ответ отправлен: 21.11.2006, 23:24


Вопрос № 63.574
Уважаемые эксперты.
Не подскажите, как сделать в Delphi 2006, чтобы участок кода компилировался, в Debug версии, а в Release версии этот участок кода не компилировался.
Отправлен: 21.11.2006, 16:52
Вопрос задал: Melamed (статус: 8-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Melamed!
Можно объявить специальную директиву DEBUG:
{$DEFINE DEBUG}
...
{Код, который компилируется в любом случае}
{$IFDEF DEBUG}
...
{Код, который компилируется только для директивы DEBUG}
...
{$ENDIF}
В этом случае программа будет скомпилирована со всем включенным в нее кодом. Если надо при компиляции исключить код для DEBUG, то нужно закоментировать {$DEFINE DEBUG} и перекомпилировать программу, тогда она скомпилируется без участка кода помещенного в{$IFDEF DEBUG}...{$ENDIF}
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 21.11.2006, 17:11
Оценка за ответ: 5
Комментарий оценки:
Все подходит. Только не надо строки
{$DEFINE DEBUG}
А чтобы код компилировался только в debug версии программы достаточно его заключить в следующ 091;ю конструкцию

...
{Код компилируется в любом случае}
{$IFDEF DEBUG}

...
{Код компелируется только в DEBUG-версии}
{$ENDIF}
{Код компилируется в любом случае}
...

А так спасибо за ответ. Он правда н 77; совсем точень но наводит на правильное решение. А это самое важное :) Поэтому и пятак заслуженный


Вопрос № 63.599
Уважаемые Эксперты! Нуждаюсь в Вашей помощи.
Каким образом программно нажать кнопку "Минимизировать окно"? Если можно, приведите пример.
Заранее благодарный.
Отправлен: 21.11.2006, 20:26
Вопрос задал: Богдан (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Н.В.
Здравствуйте, Богдан!
Если надо свернуть собственное приложение, то используйте application.Minimize;

Если чужое, у которого известен заголовок, то смотрите пример в приложении.

Удачи!

Приложение:

Ответ отправил: Н.В. (статус: 10-ый класс)
Ответ отправлен: 21.11.2006, 20:34

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Богдан!

Вот вам еще один вариант для минимизации чужого окна:
var
h : hwnd;
begin
h := findwindow(nil,'Заголовок окна');
if h <> 0 then sendmessage(h,wm_syscommand,sc_minimize,0);
end;

Пробуйте. соответсвенно для возвращения в нормальный вид: sc_restore, а максимизировать sc_maximize;
Удачи
---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 3-ий класс)
Ответ отправлен: 22.11.2006, 06:02

Отвечает: KiberZero
Здравствуйте, Богдан!
Минимизировать окно можно разными способами, в зависимости, какой именно вариант минимизации вам нужен.Если простейший вариан - минимизация до пиктограммы, то это:

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowState:=wsMinimized;
end;

Тут используется свойство формы WindowState (wsNormal, wsMinimized, wsMaximized).
Ответ отправил: KiberZero (статус: 1-ый класс)
Ответ отправлен: 24.11.2006, 21:17

Отвечает: Sattar
Здравствуйте, Богдан!
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Minimize;
end;
Ответ отправил: Sattar (статус: 4-ый класс)
Ответ отправлен: 25.11.2006, 14:47


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное