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

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


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

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

Выпуск № 445
от 16.04.2006, 11:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 305, Экспертов: 68
В номере:Вопросов: 8, Ответов: 16


Вопрос № 39873: Здравствуйте! Подскажите, пожалуйста, как добавить в форму строку состояния и показывать в ней подсказки к кнопкам. Спасибо!!!...
Вопрос № 39891: приветствую. отправляю файл на сервер с помощью Socket.SendStream. Как при этом отобразить процент отправленных данных? Спасибо. ..
Вопрос № 39905: Здравствуйте! Подскажите, плиз, самы удобный способ масштабирования DBGrid на форме при изменении ее размеров(формы). На форме располагаются две DBGrid, которые должны заполнять вдвоем всю область формы от своих верхних краев. Заранее спасибо!...
Вопрос № 39920: Доброго времени суток, эксперты. В программе через ADO использую Access-таблицы. Формат таблиц - Access97, потому что он быстрее работает и меньше места занимает, чем Access2000. При выгрузке программы сжимаю mdb-шник (см. приложение). Как я ...
Вопрос № 39921: Доброго Вам времени суток. Я тут сетевыми приложениями балуюсь, само собой возник вопрос: Как можно узнать имя компа, на котором запущена прога, чтоб результат был стрингом? Заранее спасибо....
Вопрос № 39941: Добрый вечер! Подскажите как сделать чтобы в форме можно было пользоваться колесиком мыши(скролить форму). Заранее благодарен. Алексеев А.В....
Вопрос № 39962: Здравствуйте! Подскажите, пожалуйста, каким образом создать отчет из БД и распечатать его в виде таблицы(с рамкой). QuickReports я пробовал, он не умеет это хорошо делать. Мне нужно, чтобы на странице вверху сначала выводился увеличенным шрифтом заго...
Вопрос № 39966: Здравствуйте, уважаемые эксперты. У меня проблема: я хочу сделать барабанную установку (чтобы играть на ней можно было с клавиатуры). У меня есть wav файлы, которые нужно проигрывать, при нажатии на определённую клавишу (напр. "пробел" ...

Вопрос № 39.873
Здравствуйте! Подскажите, пожалуйста, как добавить в форму строку состояния и показывать в ней подсказки к кнопкам. Спасибо!!!
Отправлен: 10.04.2006, 11:17
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: AnD1
Здравствуйте, Андрющенко Вячеслав Васильевич!
Например, так: см прил.

Приложение:

Ответ отправил: AnD1 (статус: 3-ий класс)
Ответ отправлен: 10.04.2006, 11:29

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Андрющенко Вячеслав Васильевич!
1. Ставишь на форму компонент StatusBar из вкладки Win32.
2. Добавляешь ему панель: либо в свойстве Panels, либо в контекстном меню StatusBar выбираешь Panels Editor... Тут клавиша Ins добавляет панель.
3. Для изменения размеров панелей у созданной панели изменяешь свойство width.
4. Сообщение пишется в панель таким образом:
statusbar1.Panels[0].Text:='Текст в СтатусБаре';
где 0 - номер панели (нумерация с нуля).
А вообще есть нестандартный компонент StatusBar в наборе компонент Raize, по-моему называется RZStatus, но я могу ошибаться. Так он обладает гораздо большими возможностями, чем стандартный СтатусБар.
Ответ отправил: Устинов Сергей Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 10.04.2006, 11:35

Отвечает: Samum
Здравствуйте, Андрющенко Вячеслав Васильевич!
А еще у стандартного StatusBar есть замечательное свойство AutoHint, которым почему-то редко кто пользуется. Так вот если выставить его в true, то в строке состояния будет автоматически отображаться строка из свойства hint того компонента, над которым в данный момент курсор. Только строку надо сформировать соответствующим образом:
'Эта часть строки будет показана в отдельном всплывающем окошечке|А эта часть появится в строке статуса, если включено AutoHint'.
Вот так все просто.
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Ответ отправлен: 10.04.2006, 12:35


Вопрос № 39.891
приветствую.
отправляю файл на сервер с помощью Socket.SendStream. Как при этом отобразить процент отправленных данных?
Спасибо.
Отправлен: 10.04.2006, 13:54
Вопрос задал: Панфилов А.М. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: shegeda
Здравствуйте, Панфилов А.М.!

Метод SendStream - не самый лучший для отправки больших данных по той простой причине, что предназначен он для работы с блокируемыми сокетами, а значит, на время выполнения остальные блоки приложения простаивают, в том числе и обработка событий (поскольку она выполняется в основном потоке процесса). Обойти эту беду можно, если:
- создать дочерний поток и уже из него вызывать SendStream,
- использовать таймер, настроенный на 100-1000мс, в обработчике которого контролировать завершение дочернего потока и позицию в отправляемом Stream

Приложение:

Ответ отправил: shegeda (статус: 5-ый класс)
Ответ отправлен: 10.04.2006, 14:45
Оценка за ответ: 5


Вопрос № 39.905
Здравствуйте! Подскажите, плиз, самы удобный способ масштабирования DBGrid на форме при изменении ее размеров(формы).
На форме располагаются две DBGrid, которые должны заполнять вдвоем всю область формы от своих верхних краев. Заранее спасибо!
Отправлен: 10.04.2006, 16:30
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Проходящий Мимо
Здравствуйте, Андрющенко Вячеслав Васильевич!
Можно выставить свойства Align, а на серединку, при желании, бросить Splitter с закладки Additiona;
Тогда будет так:
Grid1.Align=alTop;
Splitter1.Align=alTop;
Grid2.Align=alClient;

---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 2-ой класс)
Ответ отправлен: 10.04.2006, 16:48

Отвечает: Kazakh
Здравствуйте, Андрющенко Вячеслав Васильевич!
Использовать св-во Align у компонент DBGrid.
Возможныые варианты
Растянуть по левой стороне Left
Растянуть по правой стороне Right
Растянуть по верху Top
Растянуть по низу Bottom
Растянуть по всеё клиентской части Client
Без растягивания None.
Таким образом, чтобы выронять два DBGrida вам нужно одному из них задать Align = Left. А у другого Client. Тогда Левый DBGrid будет растянут по левой стороне (без возможности изменения ширины), а правый расьянется на всё оставшееся пространство.
Также можно использовать компонент Splitter (hfpltkbntkm). Ставьте его между гридами. Задайте ему Align = left. И при запущенной программе можно изменять ширину гридов.
А если нужны кнопки и др. компоненты, то положите Panel на форму, задайте Align панели = Bottom и на панель выложите кнопочки.
Удачи.


---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 5-ый класс)
Ответ отправлен: 10.04.2006, 16:53

Отвечает: Рубан Николай Николаевич
Здравствуйте, Андрющенко Вячеслав Васильевич!

Попробуете так в событие формы OnResize (OnCreate) добавте такие строки

(при горизонтальном расположении DBGrid)
with DBGrid1 do
begin
Left:=1; Top:=1;
Height:=(Form1.Height div 2)-15;
Width:=Form1.Width-10;
end;
with DBGrid2 do
begin
Left:=1; Top:=DBGrid1.Left+DBGrid1.Height;
Height:=DBGrid1.Height;
Width:=DBGrid1.Width;
end;

(при вертикальном расположении DBGrid)
with DBGrid1 do
begin
Left:=1; Top:=1;
Height:=Form1.Height-30;
Width:=(Form1.Width div 2)-5;
end;
with DBGrid2 do
begin
Left:=DBGrid1.Left+DBGrid1.Width; Top:=1;
Height:=DBGrid1.Height;
Width:=DBGrid1.Width;
end;
---------
Мыслю - занчит существую (Декарт)
Ответ отправил: Рубан Николай Николаевич (статус: 2-ой класс)
Ответ отправлен: 10.04.2006, 17:12

Отвечает: Delphin
Здравствуйте, Андрющенко Вячеслав Васильевич!
Поставить свойство Align.
Например береш панель где они должны быть. Ложиш туда 2 штуки. 1 Ставиш Align := alRight; 2 ставиш Align := AlClient;
---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: AvePassion@GMail.Com
Ответ отправил: Delphin (статус: Студент)
Ответ отправлен: 10.04.2006, 18:02


Вопрос № 39.920
Доброго времени суток, эксперты.
В программе через ADO использую Access-таблицы.
Формат таблиц - Access97, потому что он быстрее работает и меньше места занимает, чем Access2000. При выгрузке программы сжимаю mdb-шник (см. приложение). Как я понял, сначала:
1. создаётся сжатый файл;
2. затем удаляется несжатый и
3. сжатый переименоввывается как удалённый несжатый. :)
Вот тут происходит западло. Вновь созданный сжатый файл получается формата Access2000 (недостатки этого формата см. выше), но помеченный как Access97 (в служебной области файла). И уже не открывается ни Access'ом2002, ни 97'мым (хотя из него можно сделать импорт или поставить на его таблицы связь из другой БД). Программа с ним корректно работает, т. е. ошибок не наблюдается. Но формат меняется при сжатии...
Если есть какие идеи - пишите.
P. S. С форматом 2000 таких проблем нет.

Приложение:

Отправлен: 10.04.2006, 20:13
Вопрос задал: Злоумышленник (статус: 6-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Злоумышленник!
В строке ADO нужно добавить Engine Type=4. Видимо по умолчанию там стоит 5, а 5 это Access2000. Т.е. тем самым Вы выбираете тип движка при создании.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 11.04.2006, 06:03
Оценка за ответ: 5
Комментарий оценки:
Всё заработало, спасибо.


Вопрос № 39.921
Доброго Вам времени суток.
Я тут сетевыми приложениями балуюсь, само собой возник вопрос:
Как можно узнать имя компа, на котором запущена прога, чтоб результат был стрингом?
Заранее спасибо.
Отправлен: 10.04.2006, 20:20
Вопрос задал: IKS (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, IKS!
Вот маленький и понятный код:

uses Windows;

function GetComputerNetName: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;


---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 10.04.2006, 20:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 39.941
Добрый вечер!
Подскажите как сделать чтобы в форме можно было пользоваться колесиком мыши(скролить форму).

Заранее благодарен.
Алексеев А.В.
Отправлен: 10.04.2006, 23:31
Вопрос задал: Алексеев Александр Владимирович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Злоумышленник
Здравствуйте, Алексеев Александр Владимирович!
1. Так вроде есть события FormMouseWheelDown и FormMouseWheelUp?
2. Можно ловить событие WM_MOUSEWHEEL см. приложение

Приложение:

---------
No admins!

Ответ отправил: Злоумышленник (статус: 6-ой класс)
Ответ отправлен: 11.04.2006, 00:34
Оценка за ответ: 5

Отвечает: Полховский Александр Владимирович
Здравствуйте, Алексеев Александр Владимирович!
Легче и понятнее использовать обработчик события OnMouseWheel. Там передаётся параметр WheelDelta, что и есть перемещение. А чтобы "прокрутить форму", нужно манипулировать свойством VertScrollBar.ScrollPos или HorzScrollBar.ScrollPos. Именно они задают позицию ползунка.

Вот пример:

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
form1.VertScrollBar.Position:=form1.VertScrollBar.Position-WheelDelta;
end;


Можно и OnMouseWheelUp/OnMouseWheelDown, но у них свои особенности - они обрабатываются перед OnMouseWheel (подробнее в справке).
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 11.04.2006, 06:36
Оценка за ответ: 5


Вопрос № 39.962
Здравствуйте! Подскажите, пожалуйста, каким образом создать отчет из БД и распечатать его в виде таблицы(с рамкой). QuickReports я пробовал, он не умеет это хорошо делать. Мне нужно, чтобы на странице вверху сначала выводился увеличенным шрифтом заголовок, а ниже - таблица с данными. Можно, конечно, экспортировать это в Excel, но я не знаю, как задать рамку из Delphi. Может, есть какая-нибудь еще программа для составления отчетов? Заранее спасибо!!!
Отправлен: 11.04.2006, 09:27
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Злоумышленник
Здравствуйте, Андрющенко Вячеслав Васильевич!
Есть Rave Reports, поставляется с D7, D2005. Я пользовался, вроде ничего, но подглючивает. Лучше использовать для этих целей MS Word, Excel (если выводишь не очень много данных, а то медленно будет, наверное). Заготавливаешь шаблон с таблицей с какой надо рамкой и обрабатываешь Delphi'ей. Есть книга Василия Корнякова "Программирование документов и приложений MS Office в Delpi" по этому поводу, также Корняков вроде статьи на эту тему выкладывает http://www.kornjakov.ru/stat.htm Или используй отчёты Access, если знаком с ними, их тоже можно выводить из Delphi.
---------
No admins!
Ответ отправил: Злоумышленник (статус: 6-ой класс)
Ответ отправлен: 11.04.2006, 11:11

Отвечает: Denisss

Здравствуйте, Андрющенко Вячеслав Васильевич!

Попробуйте воспользоваться библиотекой FreeReport: http://www.torry.net/vcl/reports/reportdesigners/fr234.zip [832K].
Вполне можно провернуть описанные Вами действия.

Удачи!
Ответ отправил: Denisss (статус: Специалист)
Ответ отправлен: 11.04.2006, 20:01


Вопрос № 39.966
Здравствуйте, уважаемые эксперты. У меня проблема:
я хочу сделать барабанную установку (чтобы играть на ней можно было с клавиатуры). У меня есть wav файлы, которые нужно проигрывать, при нажатии на определённую клавишу (напр. "пробел" - звук тарелок, "Enter" - Бас бочка и т.д.). Проблем нет с их восспроизведением - загружаю все wav`ки в медиарлеер и делаю play для каждого, когда надо. Всё отлично - в MediaPlayer1 я загружаю звук тарелок и делаю Mediaplayer1.Play когда нажимается пробел и если в момент проигрывания тарелок я нажму на Enter т.е. звук басс бочки, то у меня эти 2 звука будут играть параллельно. Меня это устраивает. Но ЕСЛИ Я НАЖМУ НА ENTER 2 РАЗА (имеется в виду звук басс бочки ещё не проиграл до конца), то звук обрывается и начинает играть заново, а мне это не нужно - мне нужно ЧТОБЫ ВСЕ ЗВУКИ У МЕНЯ ПРОИГРЫВАЛИ ДО КОНЦА, будь то один и тот же звук или все разные.
Эту проблему мне надо срочно решить. Очень буду благодарен за любую помощь - даже готов переписать полностью код, но только, чтобы всё работало как я описал выше.
Отправлен: 11.04.2006, 10:37
Вопрос задал: Toxic~Fire (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Проходящий Мимо
Здравствуйте, Toxic~Fire!
Могу посоветовать использовать потоки, поместив весь код по воспроизведению в метод Execute:

unit Unit1;
interface
uses
Classes;
type
TMyBaraban = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;

implementation

procedure TMyBaraban.Execute;
begin
{ Музыку воспроизводим здесь }
end;

Только нужно учесть, что использование глобальных переменных в потоках может привести к очень непредсказуемым эфектам, поэтому глобальные переменные нужно объявлять в разделе threadvar, который аналогичен var, но для потоков. Без исходного текста более не могу ничего подсказать, удачи.
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 2-ой класс)
Ответ отправлен: 11.04.2006, 11:15

Отвечает: sir henry
Здравствуйте, Toxic~Fire!
Можно попробовать вместо MediaPlayer использовать WinAPI функцию PlaySound. Она позволяет воспроизводить звуки асинхронно.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 11.04.2006, 12:01


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное