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

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


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

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

Выпуск № 489
от 31.05.2006, 23:05

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


Вопрос № 44246: Здравствуйте! Подскажите как можно осуществить бесконечную прокрутку результатов расчетов на черном экране(как в паскале) и выходе из этих расчетов только после нажатия на клавишу?...
Вопрос № 44255: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как сделать такую вещь. Есть два ListBox`а, в первый наполнен какими-либо значениями, а второй пустой. Мне нужно, чтобы при нажатии на кнопку выбранное значение из первого листбокса добавилось...
Вопрос № 44279: Здравствуйте, господа Эксперты! У меня такие вопросы: 1). Можно ли сделать Memo, RadioGroup, RadioButton, CheckBox прозрачными? Дело в том, что у меня градиент на форме (сторонний компонент) и цвет, естественно, для контролов такой же не подберешь. Е...
Вопрос № 44284: Здраствуйте, эксперты! У меня два вопроса,один для всех,а второй для тех кто работал с OpenGL! 1)Нужно преобразовать координаты мыши от оконных(где х идёт из нижнего левогоугла, понизу в право, а у с нижнего левого угла вверх) в стандартн...
Вопрос № 44290: Доброго времени суток! У меня возникла проблема... Помогите решить! Есть файл dbf сохраненный в Excel. В нем присутствуют поля с русским текстом. Мне теперь необходимо конвертировать С ОЕМ кодировки в ANSI. P.S. Пробовал...
Вопрос № 44302: Здравствуйте, уважаемые эксперты. Трабл такой. Нужно перенести код из редактора кода в Word. Всё выделяю, копирую, вставляю и ..., получаю вместо кирилицы крякозябры ( с латиницей всё в порядке ). А может кто нибудь знает другой способ, ...
Вопрос № 44324: Добрый день. Подскажите пожалуйста как реализовать следующую функцию: Кинула на форму Memo и кнопку, действие должно происходить при нажатии на копку. Открываем файл, сразу оговорюсь, зашифрован алгоритмом RC5. Пример: Руководство...
Вопрос № 44327: Здравствуйте, уважаемые эксперты! Не поможете ли вы мне в создании такой программы на Delphi: "Создать типизированный файл, содержащий целые числа. Нужно открыть созданный фай и подсчитать сумму чисел и их количество". Заранее ОГРОМНОЕ ВАМ ...

Вопрос № 44.246
Здравствуйте!
Подскажите как можно осуществить бесконечную прокрутку результатов расчетов на черном экране(как в паскале) и выходе из этих расчетов только после нажатия на клавишу?
Отправлен: 25.05.2006, 23:06
Вопрос задала: Артемова Марина (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Артемова Марина!
Во-первых, нужно создать экран консоли, а во-вторых, выводить на нее так-же как и в Паскале, т.е. через WriteLn() и точно так-же как и в Паскале заключить в цикл с условием выхода по нажатию клавиши. Т.е. никаких отличий от Паскаля нет. Может быть Вы что-то другое имели в виду?
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 26.05.2006, 07:50


Вопрос № 44.255
Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как сделать такую вещь. Есть два ListBox`а, в первый наполнен какими-либо значениями, а второй пустой. Мне нужно, чтобы при нажатии на кнопку выбранное значение из первого листбокса добавилось во второй. Заранее благодарен!
Отправлен: 26.05.2006, 01:57
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгения
Здравствуйте, Андрющенко Вячеслав Васильевич!
procedure TForm1.Button1Click(Sender: TObject);
begin
Listbox1.CopySelection(Listbox2);
end;
Счастливо...
---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 5-ый класс)
Ответ отправлен: 26.05.2006, 04:08

Отвечает: Проходящий Мимо
Здравствуйте, Андрющенко Вячеслав Васильевич!
Это можна сделать при помощи следующего кода, притом можно использовать MultiSelect:=true :

procedure TForm1.BLeftToRightClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
if ListBox1.Selected[i] then
ListBox2.Items.Append(ListBox1.Items.Strings[i]);
i := 0;
if ListBox1.Items.Count > 0 then
while i < ListBox1.Items.Count do
begin
if ListBox1.Selected[i] then
ListBox1.Items.Delete(i)
else
i := i + 1;
end;
end;

procedure TForm1.BRightToLeftClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to ListBox2.Items.Count - 1 do
if ListBox2.Selected[i] then
ListBox1.Items.Append(ListBox2.Items.Strings[i]);
i := 0;
if ListBox2.Items.Count > 0 then
while i < ListBox2.Items.Count do
begin
if ListBox2.Selected[i] then
ListBox2.Items.Delete(i)
else
i := i + 1;
end;
end;

Удачи!
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 4-ый класс)
Ответ отправлен: 26.05.2006, 09:01


Вопрос № 44.279
Здравствуйте, господа Эксперты! У меня такие вопросы: 1). Можно ли сделать Memo, RadioGroup, RadioButton, CheckBox прозрачными? Дело в том, что у меня градиент на форме (сторонний компонент) и цвет, естественно, для контролов такой же не подберешь. Если - нет, то в каких сторонних библиотеках есть?
2).Как отловить в проге набор определенной комбинации букв, как это сделано в GTA - просто набираешь чит и не надо никаких Enter`ов - сразу все работает. Неужели только глобальный хук и таймер? Нет более простого способа? Заранее спасибо!!!
Отправлен: 26.05.2006, 11:25
Вопрос задал: Neiroman (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Neiroman!
2) Ставим для формы KeyPreview = True. Объявляем глобальные переменные, а затем ловим нажатия событием OnKeyPress() формы:

var
Form1: TForm1;
Current: String;
Cheat: Boolean = False;
Right: String = 'hello';

implementation

{$R *.dfm}

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Current:=Current+Key;
if Current = Right then
begin
Current:='';
Cheat:=not Cheat;
if Cheat < b>then Caption ont color=#0000FF>:='cheat enabled' else Caption:='cheat disabled';
end;
end;


Как нетрудно догадаться, набирать следует слово "hello". Также обратите внимание, что если в момент набора будет установлена русская раскладка клавиатуры, то код, естественно, не сработает. В этом случае следует завести массив соответствий русских и латинских букв на клавиатуре или программно переключать раскладку на английскую при запуске программы.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 26.05.2006, 14:25

Отвечает: Решетник Д
Здравствуйте, Neiroman!
1. Попробуйте покопать в сторону SetLayeredWindowAttributes.
это не объявленная (по крайней мере в Делфи 7)функция АПИ.

function SetLayeredWindowAttributes(hWindow : HWND; crKey : DWORD; bAlpha : Byte;
dwFlags : DWORD) : BOOL; stdcall; external user32 name 'SetLayeredWindowAttributes';
Она используется вот так:
f: HWND;
SetWindowLong(f, GWL_EXSTYLE, GetWindowLong(f, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(f, 0, Byte(0), 2);

Но у меня с ходу не получилось для дочернего компонента ((( может у Вас получится...

2. const aa = 'lala';
var i: integer = 1;

keypreview := true;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if aa[i] = key then
begin
if i = length(aa) then
begin
showmessage('surprise');
i := 1;
end
else inc(i);
end
else i := 1;
end;
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 6-ой класс)
Ответ отправлен: 26.05.2006, 14:35

Отвечает: Lexus
Здравствуйте, Neiroman!

1.Можно это делать с помошью пакета KsDevMediaPack - хорошая вешь там можно у любого компонента менять прозрачность (BlendValue), к сожалению ссылки не скажу (качал с диска). Воспользуйтесь поиском.
2. Никаких других стопроцентных способов не знаю. Но 80% способ могу подсказать:)

0) Бросьте на форму TLabel (Label1)

1) Создайте обработчик OnKeyPress для формы и напишите:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if pos('код1',stroka)<>0 then begin label1.Caption:='Введен код1';stroka:='';end;
if pos('код2',stroka)<>0 then begin label1.Caption:='Введен код2';stroka:='';end;
//...
if pos('кодN',stroka)<>0 then begin label1.Caption:='Введен кодN';stroka:='';end;
end;

То есть заместо "код1", "код2" проверяйте свои значения паролей а вместо "label1.Caption:='Введен код1" выполняйте свои действия.

2)Назначьте в Инспекторе объектов обработчик OnKeyPress для формы всем компонентам, которые имеют это свойство.
Ответ отправил: Lexus (статус: 3-ий класс)
Ответ отправлен: 28.05.2006, 11:36


Вопрос № 44.284
Здраствуйте, эксперты!
У меня два вопроса,один для всех,а второй для тех кто работал с OpenGL!
1)Нужно преобразовать координаты мыши от оконных(где х идёт из нижнего левогоугла, понизу в право, а у с нижнего левого угла вверх)
в стандартные(незнаю как правильно называються,где центром является центр экрана, у выше центра +,ниже - ,х левее - ,правее +)грабли в том что во втором случае значения х идут от -3,12.. до 3,12.. а у от -2,45... до 2,45... Ну а у оконных намного больше!
2) Как определить какой обьект находиться под курсором, тоесть по клику мыши получить его координаты,если что-то подобное у OpenGl`я или это надо делать ручным подбором координат обьеков.
Отправлен: 26.05.2006, 12:15
Вопрос задал: chikanok (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, chikanok!
Делается достаточно легко: сначала просчитываются координаты центра (экрана/окна), а затем находится разность в координатах. Вот пример для формы. Рекомендую развернуть её на полный экран при тестировании.

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
X0,Y0,X1,Y1,W,H: Integer;
begin
X0:=Mouse.CursorPos.X;
Y0:=Mouse.CursorPos.Y;
W:=Screen.Width;
H:=Screen.Height;
X1:=X0-Round(W/2);
Y1:=Round(H/2)-Y0;
Caption:=IntToStr(X1)+' : '+IntToStr(Y1);
end;


А чтобы сделать тоже самое, но в пределах окна, в качестве координат курсора используйте X и Y, что ловятся событием, а вместо длины и ширины экрана - размеры окна.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 26.05.2006, 14:28


Вопрос № 44.290
Доброго времени суток!
У меня возникла проблема... Помогите решить!

Есть файл dbf сохраненный в Excel. В нем присутствуют поля с русским текстом.
Мне теперь необходимо конвертировать С ОЕМ кодировки в ANSI.

P.S.
Пробовал через WinAPI стандартную функцию. Возвращаемый результат неправилен так как например буква "У" - конвертируется в "L".

Если можно скинте пожал. исходник работы.

С уважением Валерий
Отправлен: 26.05.2006, 13:23
Вопрос задал: PheanixN (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, PheanixN!
А что Вы в WinAPI пробовали? Есть функция OemToChar() и перекодирует она правильно, проверено.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 26.05.2006, 14:32


Вопрос № 44.302
Здравствуйте, уважаемые эксперты.
Трабл такой. Нужно перенести код из редактора кода в Word.
Всё выделяю, копирую, вставляю и ..., получаю вместо кирилицы крякозябры ( с латиницей всё в порядке ).
А может кто нибудь знает другой способ, как перенести код из *.pas
на бумагу?
Заранее благодарю!
Отправлен: 26.05.2006, 15:14
Вопрос задал: Dredd (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Rusland
Здравствуйте, Dredd!
Я, например, сначала из Delphi копирую в Far, а из Far-a в Word.
---------
Если партия скажет есть контакт, будем есть контакт.
Ответ отправил: Rusland (статус: Специалист)
Ответ отправлен: 26.05.2006, 15:24

Отвечает: Ерёмин Андрей
Здравствуйте, Dredd!
У меня Delphi 7 и Word XP. При копировании подобной проблемы не наблюдается. Но по-моему, раньше было что-то подобное. Попробуйте скопировать текст сначала в блокнот, а потом из блокнота в Word. Если не ошибаюсь, это должно помочь.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 26.05.2006, 15:25

Отвечает: Shcherbakov Anton
Здравствуйте, Dredd!
http://www.astonshell.ru/freeware/bred3/
скачайте вот это прогу. ей открываете ваш pas файл и переконвертируйте в кодировку ANSI. сохраняйте в текстовый файл и спокойно копируйте в ворд.
либо способ попроще, в ворде выбираете пункт в ворде втавка->файл когда спросит выставьте нужную кодировку...
вот собственно и всё
Ответ отправил: Shcherbakov Anton (статус: 2-ой класс)
Ответ отправлен: 26.05.2006, 15:28

Отвечает: Проходящий Мимо
Здравствуйте, Dredd!
Это особенность буфера обмена в XP. Чтобы правильно переносить данные напрямую нужно выставить русскую расскладку клавиатуры и в Delphi, и в Word'е. Тогда все получится.
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 4-ый класс)
Ответ отправлен: 26.05.2006, 15:31


Вопрос № 44.324
Добрый день.
Подскажите пожалуйста как реализовать следующую функцию:
Кинула на форму Memo и кнопку, действие должно происходить при нажатии на копку.
Открываем файл, сразу оговорюсь, зашифрован алгоритмом RC5.
Пример:
Руководство|Логин!$!Пароль
Руководство|Замдиректор| Логин!$!Пароль
Охрана|Старший|Логин!$!Пароль

Нужно в Memo загрузить вот так:

Логин - Пароль
Логин - Пароль
Логин – Пароль

Функцию я начала писать, но как правильно написать (закончить) не знаю ((

var
s, s1:string;
i,j:integer;
begin
Result:=0;
AssignFile(InPut,aFileName);
reset(input);
While not eof(InPut) do
begin
inc(result);
readln(input,s);
s := DecryptKey (s);
i:=pos('!$!',s);
s1:=LeftStr(s,i-1);
j:=LastDelimiter('|',s1);
// Как дальше быть ???
end;
CloseFile(Input);
end;

Вызывать я думаю так нужно:

FName := ExtractFilePath(ParamStr(0)) + 'base.txt';
if FileExists(FName) then
ReadBase(FName, Memo1);

С Уважением, Анна
Отправлен: 26.05.2006, 19:07
Вопрос задала: Анна Николаевна (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Полховский Александр Владимирович
Здравствуйте, Анна Николаевна!
Получайте пароль. Это будет правая строка от !$!, то есть с позиции i. Получайте логин. Для этого нужно взять строку слева от !$! (это строка s1), а в ней взять строку справа от разделителя | (то есть с позиции j).

login:=AnsiRightStr(s1,length(s1)-j);
passw:=AnsiRightStr(s,length(s)-i-2);
memo1.Lines.Add(login+' - '+passw);
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 27.05.2006, 15:32
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо, то что нужно.


Вопрос № 44.327
Здравствуйте, уважаемые эксперты! Не поможете ли вы мне в создании такой программы на Delphi: "Создать типизированный файл, содержащий целые числа. Нужно открыть созданный фай и подсчитать сумму чисел и их количество". Заранее ОГРОМНОЕ ВАМ СПАСИБО!!!!!!
Отправлен: 26.05.2006, 19:53
Вопрос задал: Len (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгения
Здравствуйте, Len!
var f: file of integer; // описание типизированого файла целого типа integer
i,data,count: integer;
begin
assign(f,'file1.txt'); // объявление файла, если файл не существует, то создасться новый
rewrite(f); //опкрытие файла для записи
for i:=1 to 20 do
write(f,i); // запись значений в файл вместо i идет запись нужных вам значений
reset(f); // открытие файла на чтение
count:=0;
for i:=1 to filesize(f) do begin //функция filesize(f) возвращает количество элементов в файле - то есть и количество чисел
read(f,data); //чтение данных из файла
count:=count+data; //подсчет суммы
end;
writeln(filesize(f),count); //вывод количества элементов в файле и их суммы... может быть присвоен чему вам удобно
close(f); //закрытие файла.
end.

Для более подробной информации по работе с файлами можете обратиться по этой ссылке:
http://program.rin.ru/razdel/html/1076.html

Успехов!

---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 5-ый класс)
Ответ отправлен: 26.05.2006, 20:40
Оценка за ответ: 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.33 от 25.05.2006
Яндекс Rambler's Top100

В избранное