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

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


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

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

Выпуск № 627
от 21.10.2006, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 396, Экспертов: 75
В номере:Вопросов: 12, Ответов: 21


Вопрос № 59030: Здравствуйте! Каким образом в определённой ячейке StrigDrid вывести текст под углом 90 градусов? Если невозможно, то какой компонент посоветуете? Спасибо!...
Вопрос № 59031: Уважемые эксперты, помогите решить проблемму. В переменную s:string; читаю параметры запуска, очищаю от мусора. остается путь к файлу который надо открыть. Вызываю ShellExecute(...PChar(s)...); и получаю ошибку что файл не найден и путь начинающи...
Вопрос № 59073: Уважаемы Эксперты! Подскажите, как значение S:Extended вывестив TEdit. Заранее благодарен, Ustas...
Вопрос № 59096: Как можно загрузить любые фалы (не только текстовые, но и видео, аудио и исполняемые, но в знаковой форме) в Memo?...
Вопрос № 59110: Уважаемы Эксперты! Подскажите, с помощью какой команды можно скопировать поле ввода TEdit в буфер обмена? Как тоже проделть с переменной? Заранее благодарен, Ustas....
Вопрос № 59113: Здравствуйте уважаемые эксперты! У меня к вам такой вопрос: Можно ли как-нибудь в Delphi из нескольких объектов-родителей сделать один дочерний (т.е. как в С++ друзья). Если да, то желательно бы с примером. ...
Вопрос № 59117: Доброго времени суток всем! У меня возникла такая проблема: Есть MDI приложение на Child форме которого создан RichEdit, а на главной форме создана кнопка SpeedButton при нажатии которой текст из RichEdit должен сохраняться в файл. Однако по...
Вопрос № 59119: Здравствуйте. У меня такая проблема: Я делаю игру - гонки вид сверху, где машинка - images2, карта под ней images1 (на images1 нарисована дорога и дома рядом стоящие), мне надо сделать так, чтобы машинка ездила только по дорогам и не выхо...
Вопрос № 59120: Добрый вечер, уважаемые! У меня вопрос по компонентам JEDI, в частности ControlBar. На ControlBar имеется четыре ToolBar-а, вопрос - как сохранить в ini-файле их позиции и потом их в эти позиции вывести? Нет, собственно сам процесс со...
Вопрос № 59135: Здравствуйте!!! В текстовом файле имеется текст: admin:admin/adm2/asd2 user:12345/1111/12321/ pol:2222/3333/5555/ www:wwww/eeee/ kool:9999/ kkk:9999/ Набор символов до двоеточия соответствует логину пользователя, после дво...
Вопрос № 59137: Вопрос по dll. Как можно использовать глобальную переменную внутри dll но так чтоб её значение можно было изменить в runtime из вызывающей программы....
Вопрос № 59158: Здравствуйте! Подскажите, пожалуйста, как отправить строку в COM порт и получить ответ. Спасибо. ..

Вопрос № 59.030
Здравствуйте!
Каким образом в определённой ячейке StrigDrid вывести текст под углом 90 градусов?
Если невозможно, то какой компонент посоветуете?
Спасибо!
Отправлен: 15.10.2006, 22:16
Вопрос задал: Zoof (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

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

Посмотрите, может это поможет Вам (см. второй пример).

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

Отвечает: Александр Викторович Анкудинов
Здравствуйте, Zoof!
Перерисовывайте содержимое определённых ячеек по событию DrawCell StringGrid'а. Собственно для вывода текста под углом создайте свой собственный шрифт с определёнными параметрами. В приложении находится функция для вывода текста под углом снабженная коментариями. Параметры шрифта берутся от старого шрифта.

Приложение:

---------
Век живи - век учись

Ответ отправил: Александр Викторович Анкудинов (статус: 1-ый класс)
Ответ отправлен: 17.10.2006, 20:10


Вопрос № 59.031
Уважемые эксперты, помогите решить проблемму.
В переменную s:string; читаю параметры запуска, очищаю от мусора. остается путь к файлу который надо открыть. Вызываю ShellExecute(...PChar(s)...); и получаю ошибку что файл не найден и путь начинающийся с пути к моей программе как "C:Program filesprog C:program filesadobePhotoshop.exe" в точке прерывания перед вызовом путь был нормальным.
Отправлен: 15.10.2006, 22:38
Вопрос задал: Monah (статус: 5-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 21)

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

var s: string;
....
s:='c:windowssystem32calc.exe';
ShellExecute(Handle, nil, PChar(s), nil, nil, SW_SHOW);

Работает все ОК.
Перед ShellExecute выполните ShowMessage(s); и посмотрите, что выводится в окне.

Если не получается - присылайте что Вы делаете с s и строку ShellExecute.
---------
Ответы на все вопросы - на сайте www.ya.ru
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 15.10.2006, 23:06
Оценка за ответ: 3
Комментарий оценки:
Вы не внимательно читали. Перед вызовом ShellExecute стоит точка прерывания. Там значение вполне корректное. Возможно причина в преобразованиия PChar(s)
ShellExecute(application.Handle, 'open', PChar(s), nil, nil, SW_SHOWNORMAL);

Отвечает: Lev
Здравствуйте, Monah!

Не, тут без исходного текста не разобраться. Только что прогнал Ваш пример (учел даже не стоящий у Вас после 'C:' слэш). Все равно работает железобетонно.
Ответ отправил: Lev (статус: 1-ый класс)
Ответ отправлен: 16.10.2006, 00:35


Вопрос № 59.073
Уважаемы Эксперты!
Подскажите, как значение S:Extended вывестив TEdit.
Заранее благодарен, Ustas
Отправлен: 16.10.2006, 09:01
Вопрос задал: Ustas (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Monah
Здравствуйте, Ustas!
var e: extended;

Edit1.text:=FloatToStr(E); Или
Edit1.text:=FormatFloat('Формат', E);
Формат такой
'#' - цифра если есть
'0' - цифра если есть или ноль, если пусто.
Например e:=3.141526 формат = '00.0#' выведет '03.14'
Ответ отправил: Monah (статус: 5-ый класс)
Ответ отправлен: 16.10.2006, 09:14
Оценка за ответ: 5
Комментарий оценки:
Спасибо.Ответ составлен отлично, плюсь пример.Ещё раз Спасибо!

Отвечает: Andronik
Здравствуйте, Ustas!

var a: TEdit
...
a.Text := FloatToStr (s[, формат])

Примерно так
---------
Запрограммировать можно все... кроме собственного поведения
Ответ отправил: Andronik (статус: 1-ый класс)
Ответ отправлен: 16.10.2006, 09:15
Оценка за ответ: 5

Отвечает: Gh0stik
Здравствуйте, Ustas!

Есть еще один не менее эффективный способ форматированного вывода вещественного числа:

Edit1.text:=Format('%8.2d',[e]); //выводит число с двумя знаками после запятой

Более подробно о функции Format().

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 16.10.2006, 10:31
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Н.В.
Здравствуйте, Ustas!
Почему-то все забыли про процедуру str().
Вот её описание:

str(x,s) - переводит числов строку.
Перевод целого числа: str(5,s); // s = '5'
Перевод вещественного числа: str(5.3,s); // s = 5.30000...E+000
Это не красиво и не всегда нужно.
Форматированный перевод чисел:
a) целые: str(5,3,s); // s = ' 5'
б) вещественные:
str(число:всего символов в строке:кол-во символов после точки, s);
str(5.3:6:2,s); // s = ' 5.30'
str(1000.3:6:2,s); // s = '1000.30' - Delphi не обрезает строку, а увеличивает длину выводимой строки.

Удачи!

---------
http://TheDelphi.Ru
Ответ отправил: Н.В. (статус: 7-ой класс)
Ответ отправлен: 16.10.2006, 18:09
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо, учтём!


Вопрос № 59.096
Как можно загрузить любые фалы (не только текстовые, но и видео, аудио и исполняемые, но в знаковой форме) в Memo?
Отправлен: 16.10.2006, 13:04
Вопрос задал: Томша Павел (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Monah
Здравствуйте, Томша Павел!
Очень просто, но вы увидите только отображаемые знаки с ASCII кодом<32
memo1.list.loadFromFile(имя файла);
Если Вам не обязательно видеть, а только обрабатывать то лучше воспользоваться потоком - см. приложение

Приложение:

Ответ отправил: Monah (статус: 5-ый класс)
Ответ отправлен: 16.10.2006, 13:13


Вопрос № 59.110
Уважаемы Эксперты!
Подскажите, с помощью какой команды можно скопировать поле ввода TEdit в буфер обмена?
Как тоже проделть с переменной?
Заранее благодарен, Ustas.
Отправлен: 16.10.2006, 14:23
Вопрос задал: Ustas (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, Ustas!
попробуй

edit1.CopyToClipboard; =)

либо смотри на
http://delphiworld.narod.ru/_os_.html
раздел "Буфер обмена"

Удачи.
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 16.10.2006, 14:32
Оценка за ответ: 5

Отвечает: Bcd
Здравствуйте, Ustas!

1.edit1.CutToClipboard

2.clipboard.AsText := Edit1.Text;
В uses надо добавить Clipbrd.
Ответ отправил: Bcd (статус: 1-ый класс)
Ответ отправлен: 16.10.2006, 20:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое.


Вопрос № 59.113
Здравствуйте уважаемые эксперты! У меня к вам такой вопрос:
Можно ли как-нибудь в Delphi из нескольких объектов-родителей сделать один дочерний (т.е. как в С++ друзья). Если да, то желательно бы с примером.
Отправлен: 16.10.2006, 14:38
Вопрос задал: Ram (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Mexes
Здравствуйте, Ram!
В Delphi нет множественного наследования.
Правда, можно реализовывать несколько интерфейсов.

Дружественных классов тоже нет, просто классы в одном модуле имеют полный доступ к полям друг друга.
Ответ отправил: Mexes (статус: 4-ый класс)
Ответ отправлен: 16.10.2006, 14:45

Отвечает: Sattar
Здравствуйте, Ram!
TMyClass = class(TFirstClass,TSecondClass,....)
public
//Всі необхідні властивості створеного класу. які були описані в класах
//TFirstClass,TSecondClass,....
end;
Ответ отправил: Sattar (статус: 1-ый класс)
Ответ отправлен: 17.10.2006, 00:21

Отвечает: Monah
Здравствуйте, Ram!
Можно создать класс содержаший в себе несколько других.
Но дочернии слассы надо создовать самому в конструкторе основного, и уничтожать в его деструкторе.

Приложение:

Ответ отправил: Monah (статус: 5-ый класс)
Ответ отправлен: 17.10.2006, 09:30


Вопрос № 59.117
Доброго времени суток всем!

У меня возникла такая проблема: Есть MDI приложение на Child форме которого создан RichEdit, а на главной форме создана кнопка SpeedButton при нажатии которой текст из RichEdit должен сохраняться в файл. Однако получаю ошибку обращения к адресу памяти...... что весьма удивляет!!!

Делал так:

procedure TMainForm.spSkinSpeedButton4Click(Sender: TObject);
var
formi,spisok,l: integer;
s: string;
Child: TMDIChild;
begin

formi:=MainForm.MDIChildCount;

While formi <> 0 Do
begin
spisok:=MainForm.ListBox1.Items.Count-1;
while spisok<>-1 do
begin

s:=MainForm.ListBox1.Items[spisok];
If MainForm.MDIChildren[formi].Caption = s Then
begin
l:=formi;
MainForm.MDIChildren[formi].Show;
MainForm.SynEdit1.Lines.SaveToFile(s);
Child(l).Memo1.Modified:=false;
//здесь ошибка компиляции а если я не указываю индекс к Child то все компилирует, но ошибка о которой говорилось вверху!!!
end;

spisok:=spisok-1;
end;
formi:=formi-1;
end;
end;

Заранее благодарен! С уважением, досвидания!!!
Отправлен: 16.10.2006, 15:11
Вопрос задал: Мельников Павел Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 11)

Отвечает: Monah
Здравствуйте, Melnikovpa!
Естественно ошибка ведь Child это не массив, а дочерняя форма.
MainForm.MDIChildren[i].Memo1.Modified:=false; И все должно заработать.
Ответ отправил: Monah (статус: 5-ый класс)
Ответ отправлен: 17.10.2006, 09:43


Вопрос № 59.119
Здравствуйте.
У меня такая проблема:
Я делаю игру - гонки вид сверху, где машинка - images2, карта под ней images1 (на images1 нарисована дорога и дома рядом стоящие), мне надо сделать так, чтобы машинка ездила только по дорогам и не выходила за её пределы (чтоб она не ездила по домам) + самое главное - как сделать чтоб машинка двигалась нормально, с траекторией поворота и т.д. чтоб управляя с клавиатуры она не просто двигалась вперед, назад, влево и вправо, а при полном повороте разварачивалась на 90 градусов. При этом при каждом малейшем повороте картинка менялась на другую. Как сделать?
И еще вопрос - как сделать чтоб скорость управлялась, т.е. чем дольше жмеш вперед тем скорость становилась больше, а при отпускании кнопки постепенно уменьшалась до 0. Почему картинка мигает при движении, как это исправить? Как сделать чтоб при нажатии вперед и влево, она ехала вперед и влево, а не только вперед, или только влево.
Вобщем - как сделать правдоподобное движение машинки.
Заранее благодарен.
Отправлен: 16.10.2006, 15:37
Вопрос задал: Pashenin Mihail Evgenevich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Pashenin Mihail Evgenevich!
Во-первых, статьи про программирование игр есть на www.dtf.ru
Алгоритм поворота картинки... именно по таком словосочетанию и ищется где-дь в сети.
Чтобы скорость управлялась - ввести скорость.
И в основном цикле игры, если кнопка нажата, то не
if key = VK_UP then
x := x + 0.01;
делать, а так:
if key = VK_UP then
vx := vx + 0.01;
x := x + vx;
vx := vx * 0.95; // затухание
if abs(vx) < 0.0001 then vx := 0; // до нуля
Чтобы картинка не мигала, нужна двойная буфферизация. Т.е. перед тем нарисовать изображение на экране, надо целиком подготовить его в памяти, а потом уже рисовать.
Для обработки одновременных нажатий клавиатуры надо либо отлавливать события onKeyDown/onKeyUp, либо (что более правильно) работать через DirectX (а именно DirectInput)

Чтобы машина не ездила по домам, надо либо распознавать карту, чтобы программа "отличала" дома от дороги, либо задавать к карте дополнительно ей эту информацию.
Даже учитывая, что вы решили сделать не очень сложную и большую игру, так сходу это будет довольно непросто и надо будет много чему научиться.
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 16.10.2006, 16:51
Оценка за ответ: 4
Комментарий оценки:
Спасибо, для начала хватит, надож попробывать и своими мозгиками подумати! Феникью!оК.


Вопрос № 59.120
Добрый вечер, уважаемые!
У меня вопрос по компонентам JEDI, в частности ControlBar.
На ControlBar имеется четыре ToolBar-а, вопрос - как сохранить
в ini-файле их позиции и потом их в эти позиции вывести? Нет,
собственно сам процесс сохранения проходит нормально, но иногда
они выводятся не в ту позицию, в которую по идее должны. Например,
располагаем ToolBar-ы по порядку их номеров друг под другом в четыре строки, сохраняем их позиции в файл:

Ini.WriteString('Dock Panel', 'Positions', JvControlBar.SavePositions);

Запускаем программу, читаем из файла:

JvControlBar.LoadPositions(Ini.ReadString('Dock Panel', 'Positions', ''));

Все нормально. Но если переместить, например, ToolBar1 в четвертую строку, то он никогда там не появится, а будет во второй строке вторым, а строк всего будет, соответственно, три. А это не есть хорошо. Так вот как из положения выйти? Подскажите, пожалуйста.
Отправлен: 16.10.2006, 15:46
Вопрос задал: Савенко Вадим Иванович (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, Савенко Вадим Иванович!
Используйте свойство Constraints ToolBar'ов
установленное значении MinWidth не даст ToolBar'у свернуться до минимального размера или стать рядом с другим toolbar'ом.

PS:пользуюсь последней версией jvcl
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 16.10.2006, 16:24


Вопрос № 59.135
Здравствуйте!!! В текстовом файле имеется текст:
admin:admin/adm2/asd2
user:12345/1111/12321/
pol:2222/3333/5555/
www:wwww/eeee/
kool:9999/
kkk:9999/
Набор символов до двоеточия соответствует логину пользователя, после двоеточия (через /) идут пароли под которыми
данный пользователь может войти в программу(не более 3) тоесть при открытии программа запрашивает логин(в Edit1) и пароль(в Edit2).
1 )Как организовать доступ только для тех пользователей, которые есть в файле???
2) Как сделать так чтобы использованный пароль удалялся из файла после входа в систему??
3)Как сделать чтобы только admin мог добавить, удалить пользователя и изменить пароль любого пользователя

Отправлен: 16.10.2006, 18:00
Вопрос задал: Rewer8 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sattar
Здравствуйте, Rewer8!
var
Users:array[1..10] of String; //для 10 користувачів
F:textfile;
I:integer;
S:string;
procedure TForm1.FormCreate(Sender: TObject);
begin
AssignFile(F,'c:pasw.txt');
if FileExists('c:pasw.txt')=False then ShowMessage('Вхід не можливий!!!')
else
begin
reset(F);
For I:=1 to 10 do
begin
readln(F,S);
Users[I]:=S;
end;
end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
rewrite(F);
for i:=1 to 10 do
if Users[i]<>'' then
writeln(F,Users[i]);
CloseFile(F);
end;

procedure TForm1.EnterClick(Sender: TObject);
begin
for i:=1 to 10 do
if pos(Login.Text+':',Users[i])<>0 then
if pos(Pasw.Text+'/',Users[i])<>0 then
begin
Delete(Users[i],pos(Pasw.Text+'/',Users[i]),Length(Pasw.Text)+1);
Showmessage('Доступ заборонений!!!');
end;
Login.Text:='';
Pasw.Text:='';
end;
Ответ отправил: Sattar (статус: 1-ый класс)
Ответ отправлен: 17.10.2006, 00:07
Оценка за ответ: 5

Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Rewer8!

Я бы посоветовал бросить вам эту затею и воспользоваться ini файлами, вот ссылки по данной теме:

http://code-code.narod.ru/art/ini.html
http://www.excode.ru/art189.html#start
http://code.pp.ru/forum/index.php?showtopic=123
http://hyyuducom.narod.ru/santer/articles/2.html
http://z-ol.chat.ru/reestr.htm
http://delphiworld.narod.ru/base/kol_lesson9.html
---------
Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 2-ой класс)
Ответ отправлен: 17.10.2006, 05:56


Вопрос № 59.137
Вопрос по dll. Как можно использовать глобальную переменную внутри dll но так чтоб её значение можно было изменить в runtime из вызывающей программы.
Отправлен: 16.10.2006, 18:37
Вопрос задал: Negruzzi Cristian (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Werewolf
Здравствуйте, Negruzzi Cristian!
глобальную переменную можно использовать в любом модуле либо в файле проекта DLL, если в модуле, то надо будет указывать его во всех других модулях, использующих эту переменную.

Чтобы значение можно было изменить:
Надо эпортировать функцию, которая будет изменять значение переменной по параметру
и
вызвать её.

Удачи.
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 16.10.2006, 19:01
Оценка за ответ: 5


Вопрос № 59.158
Здравствуйте! Подскажите, пожалуйста, как отправить строку в COM порт и получить ответ. Спасибо.
Отправлен: 16.10.2006, 21:13
Вопрос задал: Мисуно Михаил Петрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mexes
Здравствуйте, Мисуно Михаил Петрович!
Обзор работы с портами в Delphi:
http://articles.org.ru/cfaq/index.php?catid=48
Ответ отправил: Mexes (статус: 4-ый класс)
Ответ отправлен: 17.10.2006, 06:49


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

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

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

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

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

В избранное