Вопрос № 96083: Здравствуйте, господа Эксперты!
Вопрос по библиотеке EhLib 3.6, точнее по компоненту PrintDBGridEh. В моём приложении нужно, чтобы при печати лист занимал "альбомную" ориентацию, т.е. ширина > высоты. Как это можно настроить из ...Вопрос № 96160: Доброго времени суток уважаемые эксперты, имю к Вам два вопроса:
1) Как средствами Делфи выводить на принтер произвольные данные.
2) На компе имеются два порта COM (Com1 и Com2). К Com1 подключена GPS. Данным портом ползуется картографическая...Вопрос № 96169: Здравствуйте, уважаемые эксперты! Второй день бьюсь над такой проблемой. Помогите, пожалуйста. Есть два многострочных окна редактирования (Memo1 и Memo2). В первое я ввожу слово на кириллице (например - дом). Мне нужно, чтоб по результатам обработки ...Вопрос № 96179: Здравствуйте, уважаемые
эксперты!
подскажите как по нажатию "Еsc" закрыть форму?
заранее Спасибо!...Вопрос № 96222: Здраствуй народ. Кто может подсказать где взять описание для Lame-enc.DLL. Единственое что я нашел это MP3Export.PAS. Но там описано как из WAV в MP3 сконвертировать. А мне нужно что бы можно было конвертировать из MP3 в MP3 с разными параметрами....Вопрос № 96285: Здравствуйте уважаемые эксперты. Я на Delphi 7 сделал простенькую космическую леталку. Хочу сделать возможным стрельбу. Снаряд
в виде bmp файла. Как реализовать программное создание n количества снарядов, чтобы потом ими можно было управлять (наприме...Вопрос № 96344: Здравствуйте, господа Эксперты!
Вопрос по DBGridEh. По одному из столбцов провожу сортировку, значения в этом столбце могут повторяться. Возможно ли как-то объединить ячейки столбца, значения в которых одинаковы? Это необходимо для группиро...
Вопрос № 96.083
Здравствуйте, господа Эксперты!
Вопрос по библиотеке EhLib 3.6, точнее по компоненту PrintDBGridEh. В моём приложении нужно, чтобы при печати лист занимал "альбомную" ориентацию, т.е. ширина > высоты. Как это можно настроить из программы?
Заранее спасибо!
Отправлен: 23.07.2007, 14:15
Вопрос задал: Delph (статус: 4-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Виктор Пырлик
Здравствуйте, Delph!
Можно перед печатью вызвать диалог
PrintDBGridEh1.PrinterSetupDialog;
а можно и так:
procedure TForm1.Button1Click(Sender: TObject);
var pr:TVirtualPrinter;
begin
pr := TVirtualPrinter.Create;
pr.Orientation := poLandscape;//альбомная
PrintDBGridEh1.PrintTo(pr);
end;
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 23.07.2007, 16:39
Вопрос № 96.160
Доброго времени суток уважаемые эксперты, имю к Вам два вопроса:
1) Как средствами Делфи выводить на принтер произвольные данные.
2) На компе имеются два порта COM (Com1 и Com2). К Com1 подключена GPS. Данным портом ползуется картографическая система. Есть нужда установить вторую программу, которой тоже необходимы данные с GPS. Внимание вопрос: возможно ли средствами Делфи создать два вертуальных Com порта, и данные с Com1 скидывать одновременно на оба виртуальных, так чтобы даные якобы поступали на них с внешнего устройства и было бы возможно подключить две программы.
Отвечает: Bochvarov NikB
Здравствуйте, Балацкий Александр Михайлович!
1.tPrinter, tCanvas, ...
2.Очень легхко можно сделат апаратной разьем, так, что картографическая система будет общатся с GPS, а другая прога будет толко "сльишать" GPS.
А если тебе нужньи виртуалние портьи - смотри Eltima Software - но тогда будет сложнее - твоя прога говорит с GPS,а потом, через пару виртуал порт посьилает данни к картографической системе (один порт вьиход твоей проги, другой - вход карт системе).
Ответ отправил: Bochvarov NikB (статус: 10-ый класс)
Ответ отправлен: 24.07.2007, 02:34
Отвечает: sir henry
Здравствуйте, Балацкий Александр Михайлович!
1) "Произвольные данные" - понятие слишком произвольное. :) Точно так-же как нельзя "научиться работать на компьютере" вообще, не имея в виду какую-нибудь программу. :)
Общий принцип. Принтер имеет такую же канву (TCanvas) как, например, TImage. Поэтому работа с принтером ничем не отличается от работы с этим компонентом. Для вывода текста даём команду TextOut(), если хотим нарисовать квадрат - Rectangle(). Начало и конец вывода на принтер оформляется командами BeginDoc и EndDoc.
Поверьте, печть произвольных данных, как и рисование вообще, большая тягомотина.
В связи с этим большой интерес представляют из себя специализированные компоненты печати чего-нибудь конкретного, например только текста. Тогда сразу печать становится делом легким и приятным. Вот пример распечатки текстового файла:
{$APPTYPE CONSOLE}
Program PrintFile;
Uses Windows, Printers;
Var
F: TextFile; {Это будет текстовый файл}
MyPrinter: TextFile; {Это будет принтер}
s: string;
Begin
AssignFile(F, 'Текстовый_файл.txt');
Reset(F);
AssignPrn(MyPrinter); {Принтер, который в системе по умолчанию}
Rewrite(MyPrinter);
{Пока не конец файла, считываем его построчно и направляем на принтер}
While not Eof(F) do
Begin
ReadLn(F, s);
WriteLn(MyPrinter, s);
End;
CloseFile(MyPrinter);
CloseFile(F);
End.
Для печати данных из базы данных существуют компоненты FastReport, QReport и т.п. Они, в отличие от обычного вывода текста на принтер, позволяют заранее спроектировать, как будет выглядеть выводимая страница.
Если нужно вывести на печать только картинку, то наиболее просто это сделать присвоив канве принтера канву TImage'а. Только учтите при этом поправочные коэффициенты, т.к. размер и разрешение у экрана и у принтера разные.
В общем, о печати "произвольных данных" лучше сразу забыть. Нужно спланировать, какие конкретно данные Вы будете печатать и разработать на этой основе оптимальный алгоритм печати именно этих данных. :)
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 24.07.2007, 07:34
вот есть пример печати таблицы:
http://delphiworld.narod.ru/base/print_tstringlist.html
http://delphiworld.narod.ru/base/sg_print.html
Ответ отправил: Mishell (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 10:34
Вопрос № 96.169
Здравствуйте, уважаемые эксперты! Второй день бьюсь над такой проблемой. Помогите, пожалуйста. Есть два многострочных окна редактирования (Memo1 и Memo2). В первое я ввожу слово на кириллице (например - дом). Мне нужно, чтоб по результатам обработки процедуры Button1Click в Memo2 выводилось это слово в шестнадцетиричном юникод коде (то есть - дом). Как мне это сделать?
Отправлен: 24.07.2007, 05:35
Вопрос задал: Mustd (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Виктор Пырлик
Здравствуйте, Mustd!
В приложении код. Две функции:
StrToHex – преобразует строку в шестнадцетиричном виде
WideStrToHex – преобразует в формате юникод.
PS: Не знаю по какой причине, но у меня Delphi отказалась делать неявное приведение в функции IntToHex (т.е. приведенный пример для данной функции в справке Delphi не работает) поэтому, пришлось делать явное привидение типов.
Приложение:
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 24.07.2007, 08:41
Вопрос № 96.179
Здравствуйте, уважаемые эксперты!
подскажите как по нажатию "Еsc" закрыть форму?
заранее Спасибо!
Отправлен: 24.07.2007, 09:25
Вопрос задал: Graf David (статус: 1-ый класс)
Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Вадим Викторович Витомский
Здравствуйте, Graf David!
Во-первых, необходимо установить свойство формы KeyPrewiev=true
Во-вторых, в обработчике OnKeyPress той же формы написать if Key=#27 then Close;
Удачи!
--------- Не так страшен черт, как его чертовка!
Ответ отправил: Вадим Викторович Витомский (статус: 10-ый класс)
Ответ отправлен: 24.07.2007, 09:38 Оценка за ответ: 5 Комментарий оценки: Большое Спасибо!
Отвечает: Yumark
Здравствуйте, Graf David!
Бросить на форму MainMenu
выбрать пустой пункт меню
в свойствах Caption набрать, например, "Закрыть"
в свойствах ShortCut набрать Esc
в обработчике событий OnClick вставить - application.Terminate;
Можно ещё в свойствах Visible выбрать False, тогда меню не будет отображаться, а программа закрываться будет.
Ответ отправил: Yumark (статус: 1-ый класс)
Ответ отправлен: 24.07.2007, 09:45 Оценка за ответ: 5 Комментарий оценки: Большое Спасибо!
Отвечает: Delph
Здравствуйте, Graf David!
Самый простой способ - определить для формы обработчик реакции на нажатие клавиши:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then Form1.Close;
end;
Подпишите все компоненты на форме, которые могут получать фокус, на этот же обработчик. Если в некоторых компонентах есть своя реакция на какие-либо клавиши, то в их обработчики просто добавьте строку
if Key = #27 then Form1.Close;
Если Вы не знаете, как подписывать форму и компоненты на обработку событий, то сделайте следующее:
1) щелкните мышкой по свободному месту формы;
2) в инспекторе объектов выберите вкладку Events (события);
3) сделайте двойной щелчок по событию OnKeyPress;
4) в появившейся процедуре TForm1.FormKeyPress(Sender: TObject; var Key: Char); впишите вышеуказанную строку;
5) вернитесь к визуальному редактору формы; нажав и удерживая клавишу <Shift>, щелкните по одному разу по всем компонентам на форме;
6) в инспекоре объектов на той же вкладке Events снова найдите событие OnKeyPress, но на этот раз уже выберите в выпадающем списке процедуру FormKeyPress. Попробуйте запустить программу.
Ответ отправил: Delph (статус: 4-ый класс)
Ответ отправлен: 24.07.2007, 09:52 Оценка за ответ: 5 Комментарий оценки: Большое Спасибо!
Отвечает: Mishell
Здравствуйте, Graf David!
вариант 1:
поместить на форму кнопку и в св-вах указать Cancel:=true
вариант 2:
добавить обработчик события формы OnKeyPress
и в нем добавить такой код
if key=#27 then close;
Ответ отправил: Mishell (статус: 2-ой класс)
Ответ отправлен: 24.07.2007, 10:41
Отвечает: W@NDeReR
Здравствуйте, Graf David!
В событии формы OnKeyDown напишите следующее:
if key=VK_ESCAPE then
Close;
--------- Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 5-ый класс)
Ответ отправлен: 24.07.2007, 11:59
Отвечает: Виктор Пырлик
Здравствуйте, Graf David!
Используйте событие формы OnKeyPress:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if(Key = #27)then Close;
end;
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 24.07.2007, 11:59
Отвечает: Gladiator
Здравствуйте, Graf David!
Вообще-то #27 - это VK_ESCAPE из модуля Windows.
Приложение:
Ответ отправил: Gladiator (статус: 10-ый класс)
Ответ отправлен: 24.07.2007, 12:00
Отвечает: Дмитрий С.
Здравствуйте, Graf David!
Обрабатавыйте событие OnKeyPress формы. Также совету свойству формы KeyPreview присвоить значение TRUE. А по событию OnKeyPress писать следующеее:
If key = vkEscape then close;
При этом закроется текущая форма. Чтобы завершить работу всего приложения (если форм более одной) - пишите
Application.Terminate;
Удачи !!
--------- Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 26.07.2007, 15:05
Вопрос № 96.222
Здраствуй народ. Кто может подсказать где взять описание для Lame-enc.DLL. Единственое что я нашел это MP3Export.PAS. Но там описано как из WAV в MP3 сконвертировать. А мне нужно что бы можно было конвертировать из MP3 в MP3 с разными параметрами.
Отвечает: DimonSoft
Здравствуйте, Карасев Алексей Александрович!
Спешу Вас огорчить, но конвертирование между разными типами mp3 невозможно без преобразования в WAV. Т.е. ни одна программа не может выполнять это действие за один проход, требуется выполнить цепочку MP3->WAVE->MP3. Это особенность формата...
MP3 разных типов и битрейтов выполняют сжатие за счёт того, что выбрасывают часть звуковой информации. Но для того, чтобы проанализировать звуковой сигнал, он должен быть в формате WAV, т.е. в несжатом виде, т.к. даже почти одинаковые звуки в MP3 могут кодироваться абсолютно разными последовательностями байтов.
Спешу также огорчить Вас, но Ваша программа, увы, может легко получить среди пользователей кличку SoundDestroyer, потому что различные способы сжатия MP3 могут отбрасывать различные части звуковой информации. в результате получится, что файл, выданный Вашей программой даже будучи сконвертированным, напримепр, из 128Kbps в 320Kbps по качеству будет тянуть максимум на 92Kbps.
Проведу такую аналогию. Предположим, что существует некоторый алгоритм сжатия текста, который для сжатия выбрасывает некоторые буквы из слов, а при распаковке пытается восстановить текст с определённой степенью вероятности успеха. Пусть мы сжимаем слово "ФИГУРА". Сжав его одним "кодеком" мы получим, например, "ФИГРА". Затем мы выполняем перекодирование другим кодеком, и из-за этого теряем другую часть информации. Например, да простят меня экзаменаторы :), на выходе может получиться
"ФИГА", которую распаковщик в итоге может не заменить исходным словом, т.к. тропический фрукт в его словаре наверняка окажется. Конечно, сравнивать текст и звук весьма проблематично, но, надеюсь, пояснить суть проблемы удалось.
Возвращаясь к Вашему вопросу... Судя по всему, у Вас не возникает проблем с распаковкой MP3 в WAVE. Ну, а из WAVE в MP3 Вы перекодировать сможете, воспользовавшись исходником (MP3Export.pas). Т.е. Вы уже почти решили проблему.
С уважением, DimonSoft.
P.S. При ответе использована информация с сайта mp3-tech.org.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 24.07.2007, 19:47
Вопрос № 96.285
Здравствуйте уважаемые эксперты. Я на Delphi 7 сделал простенькую космическую леталку. Хочу сделать возможным стрельбу. Снаряд в виде bmp файла. Как реализовать программное создание n количества снарядов, чтобы потом ими можно было управлять (например с помощью координат x и y)?
Заранее спасибо.
Отправлен: 25.07.2007, 06:48
Вопрос задал: T1000 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Mishell
Здравствуйте, T1000!
Вам понадобится создать n экземпляров объектов + где-то эти объекты хранить, чтобы иметь к ним доступ, причем скорее всего надо создать свой класс объекта, в котором будут храниться параметры этих объектов.
Можно сделать например так - см. приложение.
Приложение:
Ответ отправил: Mishell (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 10:27
Отвечает: Denisss
Здравствуйте, T1000!
В приложении расположен пример двух классов: снаряда (TMissile) и списка снарядов (TMissiles).
Данный пример не является решением Вашей задачи, он предназначен для того, чтобы "натолкнуть Вас на мысль", в нем еще много не реализовано (это я оставляю Вам).
Принцип применения этих классов прост: создаете экземпляр класса TMissiles. Далее, когда какой-то объект производит выстрел, то создаете новый снаряд методом AddMissile(...), где указываете позицию объекта, сделавшего выстрел, направление движения снаряда (в радианах), скорость движения снаряда (это на всякий случай, если у Вас разные объекты стреляют с разной силой).
По таймеру делаете движение созданных снарядов (MoveMissiles), проверку всех снарядов (GetMissile), чтобы они не вышли за пределы видимости, либо, проверяете, а не попал ли снаряд в какой-либо объект. Если снаряд попал в кого-либо, либо улетел, то вызываете метод DelMissile(...), чтобы удалить этот снаряд из списка. Выполняете отрисовку оставшихся снарядов (DrawMissiles).
Свойство Count нужно, чтобы посмотреть сколько всего зарядов. И чтобы перебрать их поочередно (метода GetMissile).
Вопрос по DBGridEh. По одному из столбцов провожу сортировку, значения в этом столбце могут повторяться. Возможно ли как-то объединить ячейки столбца, значения в которых одинаковы? Это необходимо для группировки данных при печати.
Заранее благодарен за ответы.
Отправлен: 25.07.2007, 15:30
Вопрос задал: Delph (статус: 4-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Mishell
Здравствуйте, Delph!
думаю лучше все-таки будет сделать отдельный запрос с группировкой для печати и туда же добавить сортировку в зависимости от сортировки в DBGridEh ...
Ответ отправил: Mishell (статус: 2-ой класс)
Ответ отправлен: 25.07.2007, 16:00