Вопрос № 21486: Здравствуйте Уважаемые!
В dbf-файле текст в WIN-кодировке при выводе этого файла на экран SQL Explorer,
програмно через DBGrid, Database Desktop, текст отображается как DOS-кодировка,нечитается.
Пробовал разные настройки языков (через дра...Вопрос № 21493: Здравствуйте, уважаемые эксперты.
У меня к вам вопрос, можно ли обращаться к компонентам имя которых находится в переменной? Например имеется несколько кнопок Button1, Button2, Button3 ... ButtonN программно вычисляется имя кнопки и заносится в ...Вопрос № 21510: Здравствуйте уважаемые Эксперты, помогите решить проблему!
Есть веб-камера LogitechQuickCam Zoom, как вывесть изображение в мою прогу? Желательно через MediaPlayer....Вопрос № 21511: Привет всем! Вопрос следующий. Как выполнить преобразование строки к формату интернет-адреса? Opera, например, автоматически это делает и требуется сделать тоже самое в своей программе. Т.е. пробелы заменятся на "%20", другие символы - на д...
Вопрос № 21.486
Здравствуйте Уважаемые!
В dbf-файле текст в WIN-кодировке при выводе этого файла на экран SQL Explorer,
програмно через DBGrid, Database Desktop, текст отображается как DOS-кодировка,нечитается.
Пробовал разные настройки языков (через драйвера PARADOX,FOXPRO).
Если как текстовой посмотреть через Far например видно,что текст в Win-кодировке.
Для PARADOX пробовал Pdox ANSI Cyrillic.
Файл создан другой програмой на Visual FoxPro может дело имено в этом
для FOXPRO пробовал менять языковые настройки но ничего неполучилось.
Пока сделал конвертацию из win в dos.
Я делаю все это в DELPHI-7.
Спасибо.
Отправлен: 29.05.2005, 15:02
Вопрос задала: Трофименко Александр Васильевич (статус: Посетитель)
Всего ответов отправлено: 4
Отвечает: Jadd
Здравствуйте, Трофименко Александр Васильевич!
Что-то я не уверен, что текст в вашем файле в вин-кодировке. Значит, попробйте при создании таблицы правильно выбирать кодовую страницу для ТАБЛИЦЫ. Это задается в Database Desktop. Если в программе будет писать по-русски, а в Database Desktop крякозябры, тогда тут нужно будет поменять шрифты DDT в реестре и в настройках DDT. Это - уже менее важная задача.
--------- Hakuna matata
Ответ отправил: Jadd (статус: 6-ой класс)
Отправлен: 29.05.2005, 15:22 Оценка за ответ: 3 Комментарий оценки: Я уверен, я же написал,что выполняю перекодировку а значит при этом разобрался какая имено кодировка. Шрифты DDT в реестре я поменял уже ранее и если я работаю со свими таблицами то вопросов нет. Здесь таблица создана не мной и в другой программе в этом я думаю все дело.
Отвечает: komatoz
Здравствуйте, Трофименко Александр Васильевич!
У меня была похожая ситуация..
Я использовал драйвер foxprow но в результате при компиляции возникала ошибка, далее просто перезапускаешь делф и должно быть все нормально. По-моему это глюк разработчиков фирмы borland или еще чего...
Ответ отправил: komatoz (статус: 1-ый класс)
Отправлен: 30.05.2005, 02:17 Оценка за ответ: 3 Комментарий оценки: Я думаю в моем случае все дело в том,что файл создан в другой программе.
Отвечает: sir henry
Здравствуйте, Трофименко Александр Васильевич!
У Вас скорее всего в заголовке dbf-файла осталось указание на неправильную кодовую страницу. Вам нужно WIN (ср1251), а у Вас осталась ДОС (ср866).
29-ый байт от начала файла (начинается с нуля) содержит байт кодовой страницы. Можете отредактировать его прямо в FAR'e.
65 (HEX) - кодовая страница ДОС,
С9 (НЕХ) - кодовая страница WIN.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 30.05.2005, 09:08 Оценка за ответ: 3 Комментарий оценки: Познавательно,однако мне непомогает у меня стоит C9.
Отвечает: Pushkin
Здравствуйте, Трофименко Александр Васильевич!
Попробуй поменять в DBF файле байт по смещению 1Dh=29. Если постваить на ноль, то все должно быть ОК.
Ответ отправил: Pushkin (статус: 3-ий класс)
Отправлен: 31.05.2005, 18:29
Вопрос № 21.493
Здравствуйте, уважаемые эксперты.
У меня к вам вопрос, можно ли обращаться к компонентам имя которых находится в переменной? Например имеется несколько кнопок Button1, Button2, Button3 ... ButtonN программно вычисляется имя кнопки и заносится в переменную строкового типа и у этой кнопки нужно изменить какое ни будь свойство например Caption.
Отправлен: 29.05.2005, 18:28
Вопрос задала: Rider (статус: 1-ый класс)
Всего ответов отправлено: 7
Отвечает: Master89
Здравствуйте, Rider!
Да, можно. Например вот так:
Var ButtonName: String;
...
ButtonName:='Button3';
TButton(FindComponent(ButtonName)).Caption:='Click me!';
Ответ отправил: Master89 (статус: 4-ый класс)
Отправлен: 29.05.2005, 19:01 Оценка за ответ: 5
Отвечает: Bochvarov NikB
Здравствуйте, Rider!
Конечно, тьи узнаеш как можно ето сделать, но никто не делает так :)
Лучше, если создаеш ети кнопки RunTime, в масив примерно (или tList). И тогда, когда вьичислиш "i-тую" кнопку будеш работать с Buttons[i].
Приложение:
Ответ отправил: Bochvarov NikB (статус: 4-ый класс)
Отправлен: 29.05.2005, 20:13
Отвечает: Jadd
Здравствуйте, Rider!
Можно. У класса формы (например, Form1) есть такое свойство Controls. Этот контрол - массив всех контролов формы. Так вот. Можно получить конкретный контрол или по имени, или по его типу (механизм RTTI). Например, так:
var
nIndex: Integer;
begin
for nIndex:=0 to Form1.ControlCount-1 do
begin
if Form1.Controls[nIndex].Name = 'myButton' then
begin
//меняем то, что нам нравится, например меняем Caption
Form1.Controls[nIndex].Caption := 'Test';
end;
end;
Примерно так. Механизм RTTI описан в хелпе и книге С. Орлика (весьма старой).
Удачи.
--------- Hakuna matata
Ответ отправил: Jadd (статус: 6-ой класс)
Отправлен: 29.05.2005, 20:20
Отвечает: John Freeman
Здравствуйте, Rider!
Метод FindComponent у Owner'a твоих кнопок
В простейшем случае пример:
(Form1.findcomponent('Button'+inttostr(number)) as TButton).click;
--------- Время надирать задницы и жевать жвачку. Чёрт, но у меня кончилась жвачка!!!
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 29.05.2005, 21:26
Отвечает: Stamm
Здравствуйте, Rider!
i:=1;
(FindComponent(Format('Button%d',[i])) as TButton).caption:='Stamm';
Ответ отправил: Stamm (статус: 4-ый класс)
Отправлен: 29.05.2005, 22:51
Отвечает: sir henry
Здравствуйте, Rider!
Есть вариант попроще - создать массив из кнопок и обращаться к каждой кнопке по ее индексу:
var
MyButtons: array [0..9] of TButtons;
Begin
For i:=0 To 9 do
MyButtons[i].Caption:='Кнопка '+IntToStr(i);
End;
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 30.05.2005, 09:11
Отвечает: Delphin
Здравствуйте, Rider!
FindComponent(); По этой функции читай в справке Delphi она довольно хорошо написана.
--------- Ищу сервис пак для школы ^)))
Ответ отправил: Delphin (статус: 3-ий класс)
Отправлен: 30.05.2005, 15:55
Вопрос № 21.510
Здравствуйте уважаемые Эксперты, помогите решить проблему!
Есть веб-камера LogitechQuickCam Zoom, как вывесть изображение в мою прогу? Желательно через MediaPlayer.
Отправлен: 30.05.2005, 11:18
Вопрос задала: Malish (статус: Студент)
Всего ответов отправлено: 2
Отвечает: sir henry
Здравствуйте, Malish!
Запросите у разработчиков софта на эту камеру (диск должен идти в комплекте) список функций из DLL'лек для работы с камерой. Они Вам с радостью вышлют. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 30.05.2005, 11:43
Отвечает: Denisss
Здравствуйте, Malish!
Используйте набор компонент DSPack - там есть все, что нужно для работы с веб-камерами и видео файлами.
Ответ отправил: Denisss (статус: 1-ый класс)
Отправлен: 31.05.2005, 18:53 Оценка за ответ: 5
Вопрос № 21.511
Привет всем! Вопрос следующий. Как выполнить преобразование строки к формату интернет-адреса? Opera, например, автоматически это делает и требуется сделать тоже самое в своей программе. Т.е. пробелы заменятся на "%20", другие символы - на другие коды. Например, слово "Поиск" заменяется на "%D0%9F%D0%BE%D0%B8%D1%81%D0%BA", т.е. для каждой буквы русского алфавита существует некий шестнадцатеричный код. Подскажите, как выполнить такое преобразование? Варианты вроде "посмотри
каждую букву в Opera и добавь в массив" просьба не предлагать. Кроме букв преобразуются ещё и некоторые символы. Заранее благодарен.
Отправлен: 30.05.2005, 12:02
Вопрос задала: Master89 (статус: 4-ый класс)
Всего ответов отправлено: 4
Отвечает: Boriss
Здравствуйте, Master89!
То есть, Вы хотите что-то вроде того, что в приложении?
Приложение:
--------- Прорвемся! (Быть может :(( )
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 30.05.2005, 12:29 Оценка за ответ: 5 Комментарий оценки: Да, именно это. Благодарю.
Отвечает: John Freeman
Здравствуйте, Master89!
Так и делай, только не через ж.(через Opera в смысле) , а через Ord() и Format() в строку с Hex числом
Ord - номер символа
Format - этот номер символа в HEX число в строке, % сам добавишь
--------- Время надирать задницы и жевать жвачку. Чёрт, но у меня кончилась жвачка!!!
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 30.05.2005, 12:35 Оценка за ответ: 4
Отвечает: sir henry
Здравствуйте, Master89!
Если Вам нужен алгоритм замены, то пожалуйста:
1. С помощью функции Pos() находите то, что нужно заменить
2. Удаляете символ на этом месте с помощью функции Delete()
3. Вставляете на это место нужный Вам символ с помощью функции Insert().
Если же Вас интересуют конкретные символы, которые НУЖНО подставлять, то обратитесь в рассылку по браузерам или т.п.
Меня особенно порадовало вот это место в Вашем письме:
"... просьба не предлагать." Отчего же Вы не захотели написать, что Вам можно предлагать? Вы думаете все кругом умеют читать Ваши мысли? Или осведомлены об уровне Ваших знаний?
А у меня, например, слово "Поиск" представляется как "%CF%EE%E8%F1%EA". И какой-же вариант Вам предлагать в таком случае?
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 30.05.2005, 12:42 Оценка за ответ: 3 Комментарий оценки: Всё-таки, РусФак создан для помощи, а не для рассуждений ;) Насчёт слова "Поиск" - в Opera как-то по-другому сделано, хотя оба варианта выдают верное слово.
Отвечает: komatoz
Здравствуйте, Master89!
Вот как-то делал похожее, просто я за исходные данные брал таблицу.
Мог не все символы прописать. Так что проверяйте.
procedure TForm1.Button1Click(Sender: TObject);
var
res,s,st:string;
ch:char;
i:integer;
begin
s:=edit1.Text;
st:='';
for i:=1 to length(s) do
begin
res:='';
ch:=s[i];
if ch='@' then res:='40';
if ch='A' then res:='41';
if ch='B' then res:='42';
if ch='C' then res:='43';
if ch='D' then res:='44';
if ch='E' then res:='45';
if ch='F' then res:='46';
if ch='G' then res:='47';
if ch='H' then res:='48';
if ch='I' then res:='49';
if ch='J' then res:='4A';
if ch='K' then res:='4B';
if ch='L' then res:='4C';
if ch='M' then res:='4D';
if ch='N' then res:='4E';
if ch='O' then res:='4F';
if ch='P' then res:='50';
if ch='Q' then res:='51';
if ch='R' then res:='52';
if ch='S' then res:='53';
if ch='T' then res:='54';
if ch='U' then res:='55';
if ch='V' then res:='56';
if ch='W' then res:='57';
if ch='X' then res:='58';
if ch='Y' then res:='59';
if ch='Z' then res:='5A';
if ch='a' then res:='61';
if ch='b' then res:='62';
if ch='c' then res:='63';
if ch='d' then res:='64';
if ch='e' then res:='65';
if ch='f' then res:='66';
if ch='g' then res:='67';
if ch='h' then res:='68';
if ch='i' then res:='69';
if ch='j' then res:='6A';
if ch='k' then res:='6B';
if ch='l' then res:='6C';
if ch='m' then res:='6D';
if ch='n' then res:='6E';
if ch='o' then res:='6F';
if ch='p' then res:='70';
if ch='q' then res:='71';
if ch='r' then res:='72';
if ch='s' then res:='73';
if ch='t' then res:='74';
if ch='u' then res:='75';
if ch='v' then res:='76';
if ch='w' then res:='77';
if ch='x' then res:='78';
if ch='y' then res:='79';
if ch='z' then res:='7A';
if ch='.' then res:='2e';
if ch='/' then res:='2F';
if ch=':' then res:='3A';
st:=st+'%'+
res;
end;
memo1.Text:=st;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
button1.Click;
end;
Ответ отправил: komatoz (статус: 1-ый класс)
Отправлен: 31.05.2005, 02:14 Оценка за ответ: 4 Комментарий оценки: Требуется преобразовать русский текст. С английским подобных проблем нет.