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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 366
от 26.01.2006, 02:36

Администратор:Калашников О.А.
В рассылке:Подписчиков: 244, Экспертов: 60
В номере:Вопросов: 7, Ответов: 20


Вопрос № 33650: Здравствуйте, господа Эксперты! Помогите, пожалуйста, решить такую проблему: есть CheckListBox, в нем список программ для установки и есть функция StartAndWaitEnd (код в приложении), которая запускает инсталлятор и жждет их выполнения. Так вот, ...
Вопрос № 33667: Уважаемые эксперты! Хотел бы узнать, где можно узнать (в каких именно книгах или статьях) как использовать элемент Делфей DBEdit, а то везде говорится только о том, ГДЕ этот элемент используется, но нигде не встречал КАК его использовать (каким о...
Вопрос № 33685: Уважаемые эксперты!!! Я уже запариля,как правильно установить RxLibrary Там столько package-ов!Читаю readme,но все равно не может откомпилировать правильно.DELPHI 7...
Вопрос № 33696: Здравствуйте,уважаемые эксперты. КАК в label показать длину трека (в минутах) загруженого в MediaPlayer(пожалуйста, кусочек кода)?...
Вопрос № 33702: Привет! Как стандартными средствами узнать количество оперативки компа, видюхи. И их частоту соответственно? Определить размер винта? Спасибо....
Вопрос № 33704: Глупый вопрос, но очень нужный, как вывести в виде графига функции снуса и косинуса? Пример?...
Вопрос № 33715: Приветствую вас, уважаемые эксперты! Скажите пожалуйста, как в TWebBrowser перехватить ссылку по которой щёлкнули, и если она ведёт на файл с определённым расширением, то выполнить какое-то действие. Заранее спасибо! ...

Вопрос № 33.650
Здравствуйте, господа Эксперты!
Помогите, пожалуйста, решить такую проблему: есть CheckListBox, в нем список программ для установки и есть функция StartAndWaitEnd (код в приложении), которая запускает инсталлятор и жждет их выполнения. Так вот, мне нужно, чтобы при нескольких флажках прога после обработки одного переходила к следующему, т.е. обрабатывала все флажки. Как это реализовать?
И еще вопрос: при установке программ возможна перезаерузка компа (инсталлятор может предложить). Нужно после перезагрузки запуститься с Виндой и продолжить установку т.е перейти к следующему флажку. Где и как хранить инфу о пройденных флажках? Заранее спасибо.

Приложение:

Отправлен: 20.01.2006, 03:17
Вопрос задал: Ваньков Петр Семенович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Ваньков Петр Семенович!
Предполагаю, что в TCheckListBox в свойстве Items (т.е. строки) записаны пути к инсталляторам. Тогда выполняется так:

procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
for I:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[I] then
StartAndWaitEnd(CheckListBox1.Items[I]);
end;


---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 20.01.2006, 08:37

Отвечает: Меркулов Алексей
Здравствуйте, Ваньков Петр Семенович! Для решения первой задачи воспользуйтесь циклом.
Для решения второй добавте прогу в автозгрузку см приложение и запишите состояние флажков в какой-нибудь временный файл
Пример:
AssignFile(f,s);
Reset(f);
Readln(f,ch1);
if ch1='<любое значение как вам нравится >'then <устанавливаете нужное состояние флажка>
P.S.
можно воспользоваться готовым компонентом для авторана -autorunner найти его в Инете несложно

Приложение:

Ответ отправил: Меркулов Алексей (статус: 3-ий класс)
Отправлен: 20.01.2006, 23:23


Вопрос № 33.667
Уважаемые эксперты!
Хотел бы узнать, где можно узнать (в каких именно книгах или статьях) как использовать элемент Делфей DBEdit, а то везде говорится только о том, ГДЕ этот элемент используется, но нигде не встречал КАК его использовать (каким образом использовать этот элемент для занесения в базу данных информацию) :(.
С уважением
ShadowCard
Отправлен: 20.01.2006, 11:18
Вопрос задал: ShadowCard (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, ShadowCard!
Для этого вполне достаточно открыть стандартный пример из дельфей. Для вставки данных, просто переводим DataSet в режим добавления, например Table1.Insert. И после того, как ввели значения, вызвать метод Post у того же DataSet'а. Для редактирования переводим DataSet в режим Edit т.е. Table1.Edit, а после сохраняем значения аналогично вставке. Все просто.

Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 20.01.2006, 11:30

Отвечает: sir henry
Здравствуйте, ShadowCard!
Не думаю, что Вы где-то найдете книги или статьи посвященные именно DBEdit. Дело в том, что ее использование ничем не отличается от использования обычного Edit. Специфика только в том, что DBEdit жестко привязан к определенному полю таблицы БД.
Использовать очень просто:
кидаете на форму TDBEdit, в свойстве DataSource прописываете к какому источнику данных он привязан, например DataSource1. В свойстве DataField прописываете название поля таблицы, которая связана с DataSource1. Все, компонент к использованию готов. При запуске программы увидите данные этого поля текущей записи таблицы. При переходе на другую запись, информация меняется в DBEdite автоматически.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 20.01.2006, 12:29

Отвечает: Меркулов Алексей
Здравствуйте, ShadowCard! DBEdit используется просмотра или редактирования данных (типы данных Alpha, LongInt и т.д.)
надо указать какое именно поле отображается - DataField

Ответ отправил: Меркулов Алексей (статус: 3-ий класс)
Отправлен: 20.01.2006, 23:35


Вопрос № 33.685
Уважаемые эксперты!!!
Я уже запариля,как правильно установить RxLibrary
Там столько package-ов!Читаю readme,но все равно не может откомпилировать правильно.DELPHI 7
Отправлен: 20.01.2006, 15:14
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Sassoft!

1) Проверь, что версия портирована для D7, дело в том что RxLib прекратила свое существование, и портирование для новых версий осуществляют энтузиасты (спасибо им за это)
2) В самой RxLib в readme.txt есть подробный перечень и порядок (порядок очень важен), по моему 4+4 пакета. Ставил так как там написано, все прошло нормально
3) Впоследствии перешел на Raize Componets, который много шире и практически закрывает RxLib (т.е. там есть все что RxLib)
Ответ отправил: Архангельский Андрей Германович (статус: Студент)
Отправлен: 20.01.2006, 15:25

Отвечает: Kazakh
Здравствуйте, Sassoft!
Попробуйте JeDi компоненты. Насколько я понял - это как бы продолжение RxLib.
Ответ отправил: Kazakh (статус: 2-ой класс)
Отправлен: 20.01.2006, 15:30

Отвечает: Werewolf
Здравствуйте, Sassoft!
1)в начале, в меню Delphi нажмите tools-Environment options; на закладке Library в строку library path добавьте путь к папке, в которой находятся модули библиотеки RX например C:RXUnits.
2)Сохраните приложение в текстовой файл с именем D7.bpg в папку с пакетами RX и откройте его в Delphi
3)Потом Меню Projects - Build All Projects
4)View -Project Manager в появившемся списке на каждые пакета начинающийся с dcl нажать правой клавишей и в меню выбрать Install начиная в верхнего (dclrx7.bpl)

Приложение:

Ответ отправил: Werewolf (статус: Студент)
Отправлен: 20.01.2006, 18:33

Отвечает: Denisss
Здравствуйте, Sassoft!

Вся проблема действительно в том, что RxLib прекратила разработку еще на стадии 6-й Delphi. Правда, некоторые все же портировали далее ее в 7-ю версию.
Самостоятельно это можно сделать так:
найдите файл RX.inc, в нем найдите следующие строчки:

{$IFDEF VER140}  {Borland Delphi 6.x }
  {$DEFINE RX_D3}
  {$DEFINE RX_D4}
  {$DEFINE RX_D5}
  {$DEFINE RX_D6}
  {$IFDEF BCB}  { Borland C++Builder 6.x }
    {$DEFINE CBUILDER}
    {$ObjExportAll On}
    {$UNDEF DCS}
  {$ENDIF}
{$ENDIF}


после них еще допишите:

{$IFDEF VER150}  {Borland Delphi 7.x }
  {$DEFINE RX_D3}
  {$DEFINE RX_D4}
  {$DEFINE RX_D5}
  {$DEFINE RX_D6}
  {$DEFINE RX_D7}
  {$ENDIF}
{$ENDIF}


PS
Продолжением этой библиотеки является JVCL (Jedi VCL) скачать можно тут:
http://sourceforge.net/project/showfiles.php?group_id=45786

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


Вопрос № 33.696
Здравствуйте,уважаемые эксперты.
КАК в label показать длину трека (в минутах) загруженого в MediaPlayer(пожалуйста, кусочек кода)?
Отправлен: 20.01.2006, 18:14
Вопрос задал: Клёмин Сергей (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Клёмин Сергей!
Элементарно!

Label1.Caption:=IntToStr(Round(MediaPlayer1.Length/1000) div 60)+':'+IntToStr(Round(MediaPlayer1.Length/1000) mod 60);


---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 21.01.2006, 08:14
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!!!!!!

Отвечает: sir henry
Здравствуйте, Клёмин Сергей!
Если только в минутах, то придется выполнить некоторые преобразования, т.к. у МедиаПлэйера нет такого формата, как только минуты. Ближайший подходящий - часы, минуты, секунды. Задаем запись для формата:
Type
HMS = record
H: byte; {часы}
M: byte; {минуты}
S: byte; {секунды}
U: byte; {не используется}
End;
Если бы нужно было отобразить длину в этом формате, то было бы все просто:
var
dlina: LongInt;
dlina2: Double;
Begin
MediaPlayer1.TimeFormat:=tfHMS;
dlina:=MediaPlayer1.Length;
With HMS(dlina) do
Label1.Caption:=IntToStr(H)+':'+IntToStr(M)+':'+IntToStr(S);
End;
Если нужно подогнать все в минуты, то, соответсвенно, секунды и часы нужно подогнать в минуты:
With HMS(dlina) do
dlina2:=H*60+M+S/60;
Label1.Caption:=FloatToStrF(dlina2, ffFixed, 2, 8);
т.е. число с плавающей точкой преобразуется в строку с 8-ю цифрами, из них 2 цифры после запятой.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 21.01.2006, 09:00
Оценка за ответ: 5


Вопрос № 33.702
Привет!
Как стандартными средствами узнать количество оперативки компа, видюхи. И их частоту соответственно? Определить размер винта?
Спасибо.
Отправлен: 20.01.2006, 21:25
Вопрос задал: 3BEPEK (статус: 3-ий класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Slava
Здравствуйте, 3BEPEK!
Для опредиления количества оперативки на компе можно написать такую функцию, вернет значение в байтах:

function TForm1.TotalPhus:integer;
var
ms: TMemoryStatus;
begin
GlobalMemoryStatus(ms);
result:= ms.dwTotalPhys;
end;
Ответ отправил: Slava (статус: 8-ой класс)
Отправлен: 20.01.2006, 21:53
Оценка за ответ: 4

Отвечает: Schmak
Здравствуйте, 3BEPEK!
Ну совсем всё стандартными средствами, я думаю, Вам не удастся определить, но кое-что можно.
1) Определение полного и свободного объёма оперативной и виртуальной памяти:
var mem:TMemoryStatus;

GlobalMemoryStatus(mem); //Получение данных о памяти

mem.dwTotalPhys -полный объём оперативки
mem.dwAvailPhys - свободная оперативка
//Файл подкачки
mem.dwAvailPageFile
mem.dwTotalPagefile
//Виртуальная память
mem.dwAvailVirtual
mem.dwTotalVirtual
Соответственно чтобы получить занятый объём надо вычесть из полного объём свободный.
2) Определение частоты процессора (но не шиныи не памяти), может быть пригодится:

function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);
asm
dw 310Fh
mov TimerLo, eax
mov TimerHi, edx
end;

Sleep(DelayTime);

asm
dw 310Fh
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);

Result := TimerLo / (1000.0 * DelayTime);
end;


---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 21.01.2006, 10:23


Вопрос № 33.704
Глупый вопрос, но очень нужный, как вывести в виде графига функции снуса и косинуса? Пример?
Отправлен: 20.01.2006, 21:49
Вопрос задал: Andrew (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Меркулов Алексей
Здравствуйте, Andrew! Создаете на форме Image и в нужный обрабочик пишите

with Image1.Canvas do begin
For x:=0 to Image1.Width do begin
y:=Trunc(Sin(X/50)*50+Image1.Width/2);
Pixels[x,y]:=clBlack;
end;
end;
коэффициенты подберете по размерам
Ответ отправил: Меркулов Алексей (статус: 3-ий класс)
Отправлен: 20.01.2006, 23:48

Отвечает: Diman_A
Здравствуйте, Andrew!
Программа рисует прямо на форме график любой функции.

Приложение:

Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 21.01.2006, 06:05

Отвечает: Schmak
Здравствуйте, Andrew!
Кроме того, что Вам посоветовали другие эксперты могу предложить ещё один вариант.
1) Бросьте на форму компонент Chart со вкладки Addititional.
2) Щёлкните по нему правой кнопкой, выберите пункт Edit Chart
3)Там очнь много настроек, но для начала отребуется следующее:
4)На вкладке 3D поставьте или снимите галку в зависимости от того как должен выглядеть график.
5)На вкладке Series нажмите Add, в открывшемся окне выберите тип графика -Линия.
6) В нужном месте пропишите, напрмер следующее.
var i:integer;
begin
for i:=-100 to 100 do
Chart1.Series[0].AddXY(i/10,sin(i/10)) //При помощи этой процедуры добавляется точка с координатами X,Y к графику.
end;

7) Полазьте ещё в настроуках, там есть много полезного, чтобы изменить вид графика под Ваши нужды.


---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 21.01.2006, 10:23

Отвечает: sir henry
Здравствуйте, Andrew!
Ничего сложного здесь нет. Кладем на форму TImage. Его Canvas представлен в виде матрицы точек с координатами X и Y. И если координату Х мы задаем вручную (в виде градусов), то координата Y вычисляется с помощью формулы синуса или косинуса, с поправочным коэффициентом, определяющим ценральную ось графика.
Допустим высота Canvas (Y) = 200, а ширина (Х) = 600. Определяем центральную ось для Х:
Centr:=Canvas.Heght div 2; {Коррекция по оси Y}
koefX:=Canvas.Width div 360; {Коррекция по оси Х}
Вокруг этой оси будет проходить график. Теперь составляем формулу для вычисления самого графика (Х будет изменятся от 0 до 360 градусов):
For i:=0 To 360 do
Begin
Y:=Trunc(Sin(DegToRad(i))*Centr)+Centr;
X:=i*koefX;
Image1.Canvas.Pixels[X, Y]:=clBlack;
End;
Для графика косинуса вместо SIN нужно поставить COS.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 21.01.2006, 15:00


Вопрос № 33.715
Приветствую вас, уважаемые эксперты!
Скажите пожалуйста, как в TWebBrowser перехватить ссылку по которой щёлкнули, и если она ведёт на файл с определённым расширением, то выполнить какое-то действие.
Заранее спасибо!
Отправлен: 21.01.2006, 01:49
Вопрос задал: maCC (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, maCC!

Уже не первый раз в ответах ссылаюсь на событие OnBeforeNavigate2 компонента TWebBrowser. В приложении привел пример перехвата файлов с расширением .exe.
Вы же можете этот пример поправить так, как Вам того захочется, заменить, либо добавить обработку расширений.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Специалист)
Отправлен: 21.01.2006, 11:27
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!

Отвечает: sir henry
Здравствуйте, maCC!
У WebBrowser есть событие OnBeforeNavigate2, которое происходит перед открытием ссылки. У него есть параметр URL, который и представляет открываемую ссылку. Ищите через функцию Pos() нужное Вам расширение и если оно есть, то выполняете в этом же событии нужное Вам действие.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 21.01.2006, 15:11
Оценка за ответ: 5
Комментарий оценки:
Большое СПАСИБО!

Отвечает: Меркулов Алексей
Здравствуйте, maCC! Используйте событие OnBeforeNavigate свойство URL

Ответ отправил: Меркулов Алексей (статус: 3-ий класс)
Отправлен: 21.01.2006, 23:42
Оценка за ответ: 4
Комментарий оценки:
Спасибо, но можно было и подробней.


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное