Вопрос № 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 для вывода некоторых значений, но при их непосредственном выводе некоторые имеют количество знаков, которое не помещается в ячейке, и в итоге видна в ней не первая часть числа, которая основная, т.е. до запятой, а дробная. Как это можно исправить?
Отвечает: 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
Здравствуйте, эксперты!
Как сделать привязку формы к краям экрана?
Отвечает: 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 - в нужное число пикселов (до края экрана)
Ответ отправил: 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 Комментарий оценки: Спасибо, я как раз сделал именно так, до ответа на вопрос, сам догадался :)