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

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


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

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

Выпуск № 553
от 05.08.2006, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 357, Экспертов: 46
В номере:Вопросов: 6, Ответов: 9


Вопрос № 50616: Здравствуйте, Эксперты! У меня возник небольшой вопросик, но ответа я на него в интернете не нашёл из-за нехватки времени и решил спросить у вас: Как форму отобразить поверх всех окон (даже поверх панели с Пуском)? Один раз...
Вопрос № 50679: Здравствуйте, господа Эксперты! Помогите, пожалуйста, с таким вопросом: нужно создать ( в потоке TFileStream) типизированный файл с записями (record, одинаковой структуры с разными значениями полей). Как записать эти записи по очереди, естественно, н...
Вопрос № 50686: В Win XP на Delphi создаю полупрозрачное окно формы. Как сделать чтобы иконки на Desktop под ним были доступны? ..
Вопрос № 50687: Использую компоненту WordApplication для создания вордовского отчета. если даешь команду disconnect или закрываешь программу. Ворда с готовым отчетом пытается закрытся. Короче надо запустить ворду, создать отчет, отконнектится ... и даже закрыть прог...
Вопрос № 50700: Здавствуйте! Помогите пожалуйста перевести на Delphi: void WriteVarLen(register unsigned long value) { register unsigned long buffer; buffer = value & 0x7F; while ( (value >>= 7) ) { buffer <<= 8; ..
Вопрос № 50702: Здравствуйте, уважаемые Експерты! У меня есть пару вопросов, подскажите пож. или поделитесь ссылкой в нете: 1. Я задаю в свойтве проэкта версию. Подскажите пож. как можно прочитать значение ProductVersion своего проекта и другие. Ну чтоб не в...

Вопрос № 50.616
Здравствуйте, Эксперты!

У меня возник небольшой вопросик, но ответа я на него в интернете не нашёл из-за нехватки времени и решил спросить у вас:

Как форму отобразить поверх всех окон (даже поверх панели с Пуском)?

Один раз получилось, я что-то натыкал в Инспекторе объектов, но потом опять всё вернулось на свои места.

У меня Delphi 7.
Отправлен: 30.07.2006, 19:07
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, Подболотов Иван Алексеевич!
Поместить форму поверх всех окон можно, если установить для формы свойство Formstyle="fsStayOnTop." Поверх панели задач поместить форму возможно только в том случае, если это разрешено в Windows, т.е. включена соответствующая опция. Обойти это невозможно.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 30.07.2006, 19:14
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Удвительно то, что Nero может показывать на полный экран.

Отвечает: Bochvarov NikB
Здравствуйте, Подболотов Иван Алексеевич!

Посмотри HELP:
BOOL SetWindowPos(

HWND hWnd, // handle of window
HWND hWndInsertAfter, // placement-order handle
int X, // horizontal position
int Y, // vertical position
int cx, // width
int cy, // height
UINT uFlags // window-positioning flags
);

{}procedure StayOnTop0(aHWnd: HWnd; flShow: boolean);
begin
if aHWnd<>Invalid_Handle_Value then begin
if flShow then begin
SetWindowPos(aHWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE{ or SWP_NOACTIVATE Or SWP_SHOWWINDOW});
end else begin
SetWindowPos(aHWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE{ or SWP_NOACTIVATE Or SWP_SHOWWINDOW})
end;
end;
end;
Ответ отправил: Bochvarov NikB (статус: 10-ый класс)
Ответ отправлен: 31.07.2006, 00:36
Оценка за ответ: 5
Комментарий оценки:
Отлично!!!:)


Вопрос № 50.679
Здравствуйте, господа Эксперты! Помогите, пожалуйста, с таким вопросом: нужно создать ( в потоке TFileStream) типизированный файл с записями (record, одинаковой структуры с разными значениями полей). Как записать эти записи по очереди, естественно, не поверх предыдущих? Сама запись в приложении.
Как прочитать из потока такого файла определенную запись, например, 10-ую?

Приложение:

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

Отвечает: sir henry
Здравствуйте, Neiroman!
Вы зря применяете тип Real, от него программа сильно тормозит. Этот тип достался в наследство от старых компов, в которых не было математических сопроцессоров и Real служил их эмуляцией. Воспользуйтесь либо типом Single (если Ваши значения лежат в пределах 1.5 x 10^-45 .. 3.4 x 10^38) или Double (если в пределах 5.0 x 10^-324 .. 1.7 x 10^308). Есть еще отличный тип, специально для денежных (или иных с 4 знаками после запятой) расчетов - Currency (-922337203685477.5808.. 922337203685477.5807 ).
Действия с TFileStream, для Вашего случая, будут выглядеть так:
Var
f: TFileStream; {Здесь будет лежать файл}
r: TR; {Переменная Вашего типа}
i: integer;
Begin
f:=TFileStream.Create('Имя_файла', fmOpenReadWrite); {Открываем файл для записи и чтения}
{Допустим у Вас 15 записей}
Randomize;
For i:=1 To 15 Do
Begin
{Заполняем данными}
r.Name:='';
r.Age:=i;
r.Income:=Random(1000);
f.Write(r, SizeOf(TR)); {Записываем переменную в файл}
End;
{Поиск нужной записи}
f.Seek(9*SizeOf(TR), soFromBeginning); {Десятую от начала, начинается с ноля :) }
f.Read(r, SizeOf(TR)); {Читаем ее}
{Закрываем файл}
f.Free;
End;
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 31.07.2006, 13:46


Вопрос № 50.686
В Win XP на Delphi создаю полупрозрачное окно формы.
Как сделать чтобы иконки на Desktop под ним были доступны?
Отправлен: 31.07.2006, 14:13
Вопрос задал: Mtihonov (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Проходящий Мимо
Здравствуйте, Mtihonov!
Как система будет догадываться, кому предназначены действия с клавиатурой и мышью? Ваша программа не будет получать уведомлений: событий клавиатуры и мыши. Если же нужно отображать некую информацию, можно рисовать прямо на рабочем столе. Вы уточните задачу, что требуется от программы, что она делает?
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 7-ой класс)
Ответ отправлен: 31.07.2006, 15:29

Отвечает: Ерёмин Андрей
Здравствуйте, Mtihonov!
Реализовать подобное достаточно сложно. Однако, можно воспользоваться тем, что при полной прозрачности окна (т.е. 100%) оно как бы исчезает и курсор мыши начинает взаимодействовать с окном, которое расположено под нашим. Смотрите небольшой пример в приложении. При щелчке мыши окно временно становится невидимым, и в систему отправляется нажатие мыши, после чего окно снова восстанавливается. Возобновлять показ окна выше остальных после данной операции оказалось затруднительно - окно начинало мерцать без прекращения. Если требуется просто доступ к окну, расположенному под полупрозрачным, то это вполне оригинальное решение - фокус передаётся другому окну. Если же нужно работать как бы через стекло - то это довольно сложно. Возможно, имеет смысл подумать и сделать программу немного с другими функциями и обойти данную потребность. Удачи!

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 31.07.2006, 16:00


Вопрос № 50.687
Использую компоненту WordApplication для создания вордовского отчета. если даешь команду disconnect или закрываешь программу. Ворда с готовым отчетом пытается закрытся. Короче надо запустить ворду, создать отчет, отконнектится ... и даже закрыть программу но при этом ворда с моим отчетом должна остатся открытой
Отправлен: 31.07.2006, 14:42
Вопрос задал: Santana (статус: 4-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Santana!

У WordApplication свойство AutoQuit делаешь false.

Удачи!
---------
Ответы на все вопросы - на сайте www.ya.ru
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 31.07.2006, 18:28


Вопрос № 50.700
Здавствуйте!
Помогите пожалуйста перевести на Delphi:

void WriteVarLen(register unsigned long value)
{
register unsigned long buffer;
buffer = value & 0x7F;
while ( (value >>= 7) )
{
buffer <<= 8;
buffer |= ((value & 0x7F) | 0x80);
}
while (TRUE)
{
putc(buffer,outfile);
if (buffer & 0x80)
buffer >>= 8;
else
break;
}
}
unsigned long ReadVarLen()
{
register unsigned long value;
register unsigned char c;
if ( (value = getc(infile)) & 0x80 )
{
value &= 0x7F;
do
{
value = (value >> 7) + ((c = getc(infile)) & 0x7F);
} while (c & 0x80);
}
return(value);
}
Отправлен: 31.07.2006, 16:42
Вопрос задал: Mo-skin (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Татьяна
Здравствуйте, Mo-skin!
Вроде тот же код
http://www.kvraudio.com/forum/printview.php?t=30108&start=0
---------
Возможно все. И ничего возможно тоже.
Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 31.07.2006, 16:52
Оценка за ответ: 5
Комментарий оценки:
Именно оно!


Вопрос № 50.702
Здравствуйте, уважаемые Експерты!
У меня есть пару вопросов, подскажите пож. или поделитесь ссылкой в нете:
1. Я задаю в свойтве проэкта версию. Подскажите пож. как можно прочитать значение ProductVersion своего проекта и другие. Ну чтоб не вскавлять к приверу на форме "О программе..." тоже значение а при открытии этой формы автоматически заносилось в один из Лабелов.
2. Я пытаюсь вывести на печать текст их Memo :
var
f: TextFile;
...
AssignPrn(f);
ReWrite(f);
WriteLn(f, Memo.Lines.Strings[1]);
CloseFile(f);
...
Подскажите пож. где можно почитать как можно задавать отступы по краям страницы и сделать нумерацию в низу страницы как делает Блокнот к примеру.
Заранее спасибо.
Отправлен: 31.07.2006, 16:53
Вопрос задал: Vasiliy (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Coupler
Здравствуйте, Vasiliy!
По поводу Version Info - посмотрите процедуру в приложении или зайдите на www.delphiworld.narod.ru - там еще много статей о Version Info.

Приложение:

Ответ отправил: Coupler (статус: Студент)
Ответ отправлен: 31.07.2006, 17:43
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Vasiliy!
2. Если печатать именно таким образом, то нужно внутри цикла считать строчки. Если не трогать настройки принтера по умолчанию, то влезает примерно 60...64 строки, тогда при цифре, например 63, нужно слать на печать номер страницы и код прогона страницы, чтобы принтер ее выплюнул.
Var
Page: Integer;
Begin
Page:=1;
For i:=0 To Memo.Lines.Count-1 Do
Begin
WriteLn(Printer, Memo.Lines[i]);
If i mod 63 = 0 Then
Begin
WriteLn(Printer, 'Страницы ', Page);
WriteLn(Printer, Код_прогона_страницы);
Inc(Page);
End;
End;
End;
Учтите однако, что код прогона страницы у разных принтеров разный.
Отступы по левому краю делаются обычной вставкой пробелов, либо знаком табуляции:
WriteLn(Printer, ' ', Memo.Lines[i]);
Отступы сверху - опять же подсчетом напечатаных пустых строк.
-----------------
Однако по моему мнению более целесообразно использовать не прямую печать, как Вы используете, а печать через объект TPrinter, который работает не с самим принтером, а с его виртуальным присутствием в ОС.
Из преимуществ могу сказать, что там есть стандартный метод прогона страницы (TPrinter.NewPage), свойство номера страницы (TPrinter.PageNumber) и еще много всего уже унифицированого, независимого от типа принтера, например выбор шрифта печати.
-------------------
Почитать о печати текстов можно на delphiworld.narod.ru в разделе "ОС и железо - Принтеры и печать"
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 01.08.2006, 06:25
Оценка за ответ: 5


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

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

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

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

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

В избранное