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

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


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

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

Выпуск № 779
от 13.04.2007, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 459, Экспертов: 89
В номере:Вопросов: 5, Ответов: 12


Вопрос № 81474: Приветствую, уважаемые эксперты! Суть вопроса... Есть под Winamp плагин, позволяющий поместить кнопки управления программой на заголовок активного окна (рядом с кнопками "закрыть" и т.п.). Вот я и задался вопросом, а можно ли написать п...
Вопрос № 81487: Здравствуйте, уважаемые эксперты. Созрел у меня глупый, ламерский вопрос по Delphi. Итак. Я беру элемент Stringgrid для вывода некоторых значений, но при их непосредственном выводе некоторые имеют количество знаков, которое не помещается в ячейке, и ...
Вопрос № 81491: Здравствуйте, эксперты! Как сделать привязку формы к краям экрана?...
Вопрос № 81493: Не подскажете пожалуйста как в делфи будут выглядеть формулы для расчета средней арифметической величины, средней гармонической, средней квадратичной, средней кубической, средней геометрической :))...
Вопрос № 81539: Добрый день! При работе с COM-портом у меня возникла такая поблема (или, точнее, неудобство). Чтобы отправить какую-то команду в порт, используется функция, которая ТОЛЬКО посылает команды. А когда приходит ответ, то запускается процедура (происх...

Вопрос № 81.474
Приветствую, уважаемые эксперты!
Суть вопроса... Есть под Winamp плагин, позволяющий поместить кнопки управления программой на заголовок активного окна (рядом с кнопками "закрыть" и т.п.). Вот я и задался вопросом, а можно ли написать подобную программу на Дельфи, но вывести туда настраиваемые кнопки часто требующихся программ? Подскажите, что можно почитать по этой теме или как реализовать нечно подобное?
Отправлен: 07.04.2007, 19:51
Вопрос задал: Mart (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lomer
Здравствуйте, Mart!
Прочитайте вот эту статью из DelphiWorld. Здесь очень хорошо все описано, только не забудьте Form2.Visible поставить в true. С различными значениями придется экспериментировать ;)

Приложение:

Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 08.04.2007, 14:26
Оценка за ответ: 5
Комментарий оценки:
Спасибо, забавный способ... Я до сих пор в толк не мог взять, как оно реализуется, а ларчик, как всегда, просто открывался...


Вопрос № 81.487
Здравствуйте, уважаемые эксперты. Созрел у меня глупый, ламерский вопрос по Delphi. Итак. Я беру элемент Stringgrid для вывода некоторых значений, но при их непосредственном выводе некоторые имеют количество знаков, которое не помещается в ячейке, и в итоге видна в ней не первая часть числа, которая основная, т.е. до запятой, а дробная. Как это можно исправить?
Отправлен: 07.04.2007, 21:34
Вопрос задал: SunnyKiller (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Dr.Alex
Здравствуйте, SunnyKiller!
Используй свойство ColWidths компонента TStringGrid так:
StringGrid.ColWidths[i] := 10; ты устанавливаешь ширину i-той колонки в 10 пикселей.
Таким образом при старте программы можно установить ширины тех колонок, которые тебе нужны.
Ответ отправил: Dr.Alex (статус: 10-ый класс)
Ответ отправлен: 07.04.2007, 21:55
Оценка за ответ: 5
Комментарий оценки:
Огромное Спасибо. Всё получилось именно так, как и надо.

Отвечает: Gh0stik
Здравствуйте, SunnyKiller!

Можно еще и усовершенствовать - сделать автоматическую подгонку ширины колонки.

В приложении процедура, которая находит строку с максимальной длинной и по ее длине устанавливает ширину колонки.

Пример использования (подгоняем ширину каждого столбца):

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to StringGrid1.ColCount-1 do
AutoSizeGridColumn(StringGrid1, i);
end;


Либо просто для конкретного столбца: AutoSizeGridColumn(StringGrid1, 7);

Good Luck!!!

Приложение:

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

Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 08.04.2007, 01:29


Вопрос № 81.491
Здравствуйте, эксперты!
Как сделать привязку формы к краям экрана?
Отправлен: 07.04.2007, 21:52
Вопрос задал: Patriotix-N (статус: 3-ий класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Bingo
Здравствуйте, Patriotix-N!
Для того, чтобы форма "притягивалась" или "прилипала" к краям экрана, для этого нужно обрабатывать сообщение WM_WINDOWPOSCHANGING, которое окно всякий раз принимает, когда перемещается по экрану. Ниже приведен кусок кода, где за 20 пикселей до края форма прилипает к краям экрана (как в Winamp'e):
----
private
procedure WMWINDOWPOSCHANGING
(Var Msg: TWMWINDOWPOSCHANGING);
message WM_WINDOWPOSCHANGING;
.............

procedure TForm1.WMWINDOWPOSCHANGING (var Msg: TWMWINDOWPOSCHANGING);
const
Docked: Boolean = FALSE;
var
rWorkArea: TRect;
StickAt : Word;
begin
StickAt := 20;

SystemParametersInfo
(SPI_GETWORKAREA, 0, @rWorkArea, 0);
//обрабатываем каждый край формы
with Msg.WindowPos^ do begin
if x <= rWorkArea.Left + StickAt then begin
x := rWorkArea.Left;
Docked := TRUE;
end;

if x + cx >= rWorkArea.Right - StickAt then begin
x := rWorkArea.Right - cx;
Docked := TRUE;
end;

if y <= rWorkArea.Top + StickAt then begin
y := rWorkArea.Top;
Docked := TRUE;
end;

if y + cy >= rWorkArea.Bottom - StickAt then begin
y := rWorkArea.Bottom - cy;
Docked := TRUE;
end;

if Docked then begin
with rWorkArea do begin
// запрещаем перемещение за пределы экрана
if x < Left then x := Left;
if x + cx > Right then x := Right - cx;
if y < Top then y := Top;
if y + cy > Bottom then y := Bottom - cy;
end; end;
end;
inherited;
end;
end.

---------
C темным пивом в светлое будущее!
Ответ отправил: Bingo (статус: 3-ий класс)
Ответ отправлен: 07.04.2007, 22:45
Оценка за ответ: 5
Комментарий оценки:
Спасибо попробую!

Отвечает: Алексеев Александр Владимирович
Здравствуйте, Patriotix-N!

Может и аматорски, но можно жестко задать значения Left и top формы например на событие onShow
Ответ отправил: Алексеев Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 07.04.2007, 23:16
Оценка за ответ: 3
Комментарий оценки:
Смотри минифорум!

Отвечает: UnRe@l
Здравствуйте, Patriotix-N!
В Properties:
ScreenSnap:=True и SnapBuffer:=...
---------
Cogito, ergo sum (c) R. Descartes (1596-1650)
Ответ отправил: UnRe@l (статус: 2-ой класс)
Ответ отправлен: 08.04.2007, 03:20
Оценка за ответ: 3
Комментарий оценки:
Смотри минифорум!

Отвечает: Iksmensp
Здравствуйте, Patriotix-N!
Для этого достаточно в свойствах формы выбрать ScreenSnap:=true;
Счастливо!
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 08.04.2007, 12:18
Оценка за ответ: 3
Комментарий оценки:
Смотри минифорум!

Отвечает: Lomer
Здравствуйте, Patriotix-N!

Установите свойство формы ScreenSnap в TRUE, а SnapBuffer - в нужное число пикселов (до края экрана)

[Для экзаменаторов!!! Дубль!] -~= Gh0stik =~-

Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 08.04.2007, 13:59
Оценка за ответ: 3
Комментарий оценки:
Смотри минифорум!

Отвечает: Esi
Здравствуйте, Patriotix-N!
Для этого нужно написать так:
form1.top:=0; form1.left:=0; form1.width:=screen.Width; form1.Height:=screen.Height;
например в procedure Tform1.FormActivate(Sender: TObject).
Ответ отправил: Esi (статус: 1-ый класс)
Ответ отправлен: 09.04.2007, 18:21
Оценка за ответ: 1
Комментарий оценки:
Абсолютно не в тему!
Мне кажется в программировании вы понимаете пока мало, раз даете такой ответ.
Вопрос был абсолютно в другом, это можно было проследить по другим ответам.
А вообще проще свойство WindowState установить в wsMaximized, это приведет к аналогичному результату.


Вопрос № 81.493
Не подскажете пожалуйста как в делфи будут выглядеть формулы для расчета средней арифметической величины, средней гармонической, средней квадратичной, средней кубической, средней геометрической :))
Отправлен: 07.04.2007, 21:59
Вопрос задал: Mantis (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Mantis!

Формулы просто так не получиться - необходимо сделать ряд последовательных действий.
Вот пример программки, которая вычисляет нужные величины.

const n=10;
var d: array [1..n] of integer;
i:integer;
k,g,h,a:real;
begin
a:=0; {среднее арифметическое}
for i:=1 to n do a:=a+d[i];
a:=a/n;

k:=0; {среднее квадратичное}
for i:=1 to n do k:=k+sqr(d[i]);
k:=sqrt(k/n);

g:=1; {среднее геометрическое}
for i:=1 to n do g:=g*d[i];
g:=exp((1/n)*ln(g));

h:=0; {среднее гармоническое}
for i:=1 to n do h:=h+1/d[i];
h:=n/h;
end.

Вам только останется заполнить данными массив d. И еще при нахождении среднего геометрического необходимо следить за знаком переменной, которая находится под логарифмом (нельзя чтобы она была отрицательной).

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 08.04.2007, 01:19
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое ^_^

Отвечает: Lomer
Здравствуйте, Mantis!
Посмотрите пример(числа в массиве nums). Что такое среднее кубическое? Почему-то я о таком ни разу не слышал. Если я правильно представляю, то это, скорее всего, корень 3-ей степени из суммы кубов чисел, поделенной на их кол-во. Тогда подсчет будет происходить так:

res:=0;
for i:=1 to N do res:=res+Power(nums[i],3);
res:=Power(res/N,1/3);
ShowMessage(FloatToStr(res));

Приложение:

Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 08.04.2007, 13:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо вам огромное


Вопрос № 81.539
Добрый день!
При работе с COM-портом у меня возникла такая поблема (или, точнее, неудобство). Чтобы отправить какую-то команду в порт, используется функция, которая ТОЛЬКО посылает команды. А когда приходит ответ, то запускается процедура (происходит событие) у которого в параметрах и есть ответ.
А как можно организовать свою функцию, которая сразу возвращает ответ без всяких процедур? Сложность еще в том, что между запросом и ответом есть некоторая временная задержка.
Отправлен: 08.04.2007, 08:57
Вопрос задал: Red Spirit (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PGM
Здравствуйте, Red Spirit!

В добавление к предыдущему ответу: можно опираться не на событие, а на проверку статуса порта (функция ClearCommError) - тогда процесс выглядит более-менее естественно - записали в порт, подождали в цикле пока ответ появился (или другой причины для сброса не возникло), считали данные из порта.

Ответ отправил: PGM (статус: 3-ий класс)
Ответ отправлен: 09.04.2007, 11:25
Оценка за ответ: 5
Комментарий оценки:
Спасибо, я как раз сделал именно так, до ответа на вопрос, сам догадался :)


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.48 от 12.04.2007
Яндекс Rambler's Top100

В избранное