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

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


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

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

Выпуск № 448
от 19.04.2006, 13:05

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


Вопрос № 40193: Здравствуйте! Подскажите пожалуйста где мне можно достать(узнать,найти) информацию о том как заменить поврежденные быйты на нули с помощью Delphi или просто алгоритм, в котором объясняется принцып действие замены данных. Ну и вообще замечательно ...
Вопрос № 40198: Здравствуйте! Подскажите, пожалуйста, как из строки удалить все символы, кроме букв русского и англ. алфавитов. Другой вариант: как оставить только русские буквы и цифры. Заранее спасибо!...
Вопрос № 40202: Здраствуйте, мне нужно, чтобы на события мыши происходило какое-нибудь действие, не только на форме, а и везде. поэтому я использую сообщения от Windows, а не onMouseUp(delphi). Но почвему эти сообщения срабатывают эсли мышка находится вне окна. ..
Вопрос № 40261: Здраствуйте! Как я могу писать на Caption-е элементов МаinMenu на Азербайджанском. Азербайджанский это не юникод. Просто я буду писать на русском, а все будеть выгладеть на Азербайджанском. Для этого уменя есть шрифты....
Вопрос № 40263: Здравствуйте эксперты. Такой вопрос: Есть некое приложение на Delphi. В нем возвращается текст в PAnsiChar. Появилась необходимость узнать количество символов в тексте. Функция strlen раумеется ругается на несоответствие типов. Проц...
Вопрос № 40272: Здравствуйте! Мне нужна ваша помощь. У меня есть класс TSonEdit - наследник стандартного TEdit. По примерам я собрал вот это(см. приложение). Работает нормально. Но я не понимаю, как. Объясните, пожалуйста, что делает строчка "Parent := self;&qu...

Вопрос № 40.193
Здравствуйте!
Подскажите пожалуйста где мне можно достать(узнать,найти) информацию о том как заменить поврежденные быйты на нули с помощью Delphi или просто алгоритм, в котором объясняется принцып действие замены данных. Ну и вообще замечательно будет если датите пример(хотя бы самый самый простенький) на Delphi.
Отправлен: 13.04.2006, 14:18
Вопрос задал: Latent (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Bochvarov NikB
Здравствуйте, Latent!
Пример:
a:=b;
Так меняем данньи в Делфи.
Ответ отправил: Bochvarov NikB (статус: 7-ой класс)
Ответ отправлен: 13.04.2006, 14:34

Отвечает: Проходящий Мимо
Здравствуйте, Latent!
Вопрос, конечно, очень информативный!
Заменить можно следующим алгоритмом:
1. открыть искомый файл (файл1) для чтения;
2. создать исходящий файл (файл2);
3. прочитать файл1 побайтно;
4. найти поврежденные байты;
5. если они есть, записать нули в файл2, в другом случае записать прочитаые даные с файла1;
Приблизительно так. Правда, история умалчивает о структуре файла и будет ли он при этом читаться.

---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 2-ой класс)
Ответ отправлен: 13.04.2006, 14:53

Отвечает: Delphin
Здравствуйте, Latent!
Поврежденный байты чего? С носителей или из памяти?
Обычно это узнается либо по нечитаемости, либо по контрольной сумме которая потом не совпадает. А если это память, то пишит допустим все единицы а потом читают и они должны совпасть.
---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: AvePassion@GMail.Com
Ответ отправил: Delphin (статус: Студент)
Ответ отправлен: 13.04.2006, 15:30

Отвечает: Tamashev Denis M
Здравствуйте, Latent!
Прочитайте Delphi глазами Хакера !
Там есть примеры "Code Injection"
Тоесть копируеца файл после чего повреждённые сектора заменяюца на "0" !
Если интересно я могу скинуть свою програмку которая делает "Code Injection"
Или могу помочь с проэктом !
Также небольшой пример есть вот тут "http://www.cheatsmaximal.net/articles/codeinjection.php"

Удачи !
Ответ отправил: Tamashev Denis M (статус: 2-ой класс)
Ответ отправлен: 13.04.2006, 19:53


Вопрос № 40.198
Здравствуйте! Подскажите, пожалуйста, как из строки удалить все символы, кроме букв русского и англ. алфавитов. Другой вариант: как оставить только русские буквы и цифры. Заранее спасибо!
Отправлен: 13.04.2006, 14:35
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Андрющенко Вячеслав Васильевич!

var s1,s2:string;
mn: set of char;
i:integer;
begin
mn:=['A'..'Z']+['a'..'z']+['а'..'я']+['А'..'Я']; //Если нужно добавить цифры +['0+'9];
s1:='dfyg234dfhàâðâà'; //Эту строку обрабатываем.
s2:='';
for i:=1 to length(s1) do
begin
if s1[i] in mn then s2:=s2+s1[i];
end;
s1:=s2;

Будут вопросы - пиши.
Ответ отправил: Устинов Сергей Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 13.04.2006, 14:53

Отвечает: AnD1
Здравствуйте, Андрющенко Вячеслав Васильевич!
см приложение.

Приложение:

Ответ отправил: AnD1 (статус: 4-ый класс)
Ответ отправлен: 13.04.2006, 15:01

Отвечает: Рубан Николай Николаевич
Здравствуйте, Андрющенко Вячеслав Васильевич!

Вот попробуйте сделать так:
const buki1=['a'..'z','A'..'Z','а'..'я','А'..'Я'];
buki2=['а'..'я','А'..'Я','0'..'9'];
var st,sn1,sn2:string;
i:integer;
begin
sn1:=''; sn2:='';
st:='флоыrwetertдвар йнкterwtйгр84tre239 ай9нк239';
For i:=1 to length(st) do
begin
if st[i] in buki1 then sn1:=sn1+st[i];
if st[i] in buki2 then sn2:=sn2+st[i];
end;
end;
---------
Мыслю - значит существую (Декарт)
Ответ отправил: Рубан Николай Николаевич (статус: 3-ий класс)
Ответ отправлен: 13.04.2006, 15:08


Вопрос № 40.202
Здраствуйте, мне нужно, чтобы на события мыши происходило какое-нибудь действие, не только на форме, а и везде. поэтому я использую сообщения от Windows, а не onMouseUp(delphi). Но почвему эти сообщения срабатывают эсли мышка находится вне окна.
Например: procedure wmRButtonDown(var Msg: TWMMButtonDown); message wm_RButtonDown;
Отправлен: 13.04.2006, 15:21
Вопрос задал: Yujin (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Рубан Николай Николаевич
Здравствуйте, Yujin!

Судя по всему данный вопрос похож на провакацию, но если нет то вообче то Windows не шлет сообщения вне региона формы проекта!!!

Т.е. все ваши строки кода работают нормаль!!!!!!!!!!!!!!!!!
---------
Мыслю - значит существую (Декарт)
Ответ отправил: Рубан Николай Николаевич (статус: 3-ий класс)
Ответ отправлен: 13.04.2006, 15:40


Вопрос № 40.261
Здраствуйте! Как я могу писать на Caption-е элементов МаinMenu на Азербайджанском. Азербайджанский это не юникод. Просто я буду писать на русском, а все будеть выгладеть на Азербайджанском. Для этого уменя есть шрифты.
Отправлен: 14.04.2006, 09:58
Вопрос задал: E.T.T (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Kazakh
Здравствуйте, E.T.T!
MainMenu берет шрифт от родитель, то есть формы. Значица указывайте нужный шрифт в свойствах формы и вводите капшины на Азербайджанском. Думаю проблем не не будет.
А вот у меня с казахским проблема. Даже юникодовские компоненты не отбражают казахский :-(

---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 6-ой класс)
Ответ отправлен: 14.04.2006, 10:46
Оценка за ответ: 2

Отвечает: Рубан Николай Николаевич
Здравствуйте, E.T.T!

Просто включите ваши шрифты прямо в проект для этого нужно:
Создаем текстовый файл *.rc в котором описываем шрифт:
FONT1 ANYFONT "font.ttf"
Первые два параметра могут быть любыми, они будут использоваться в программе.

Зате создаем файл ресурса:
если вы создали файл "xxxfont.rc" то пишем команду:
BRCC32 xxxfont.rc
Создастся новый файл "xxxfont.res"

В программу добавляем директиву компилятора, чтобы включить вновь созданный файл:
{$R xxxfont.res}
Добавляем процедуру создания файла из ресурса, делающим шрифт доступным для использования. Пример1.

Теперь вы можете использовать данный шрифт в своем приложении. Пример 2.




Приложение:

---------
Мыслю - значит существую (Декарт)

Ответ отправил: Рубан Николай Николаевич (статус: 3-ий класс)
Ответ отправлен: 14.04.2006, 11:13


Вопрос № 40.263
Здравствуйте эксперты.

Такой вопрос:

Есть некое приложение на Delphi. В нем возвращается текст в PAnsiChar. Появилась необходимость узнать количество символов в тексте. Функция strlen раумеется ругается на несоответствие типов. Процедура strpas не принесла результата
"strlen(strpas(GetCaptionAtPoint(CrPos)))"
Тоже ругань на несоответствие типов.

Может кто подскажет как перевести в тип стринг?
Заранее спасибо.
Отправлен: 14.04.2006, 10:03
Вопрос задал: Асташов Андрей Александрович (статус: 10-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Асташов Андрей Александрович!

var
PasStr: String;
Len: Integer;
begin
PasStr := String(GetCaptionAtPoint(CrPos));
Len := Length(PasStr);
end;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 2-ой класс)
Ответ отправлен: 14.04.2006, 10:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо за оперативность.
Работает.
Два года уже не писал на Дельфях и все позабыл :-)

Отвечает: Рубан Николай Николаевич
Здравствуйте, Асташов Андрей Александрович!

Попробуете так:

x:=length(string(PChar('qweerty')));
---------
Мыслю - значит существую (Декарт)
Ответ отправил: Рубан Николай Николаевич (статус: 3-ий класс)
Ответ отправлен: 14.04.2006, 11:19

Отвечает: Denisss

Здравствуйте, Асташов Андрей Александрович!

PAnsiChar - указатель на строку, оканчивающуюся нулем. Именно так strlen и проверяет длину строки (т.е. если 0, то строка закончилась).
Функция StrPas, как раз и переводит в строку типа String!
А после этого преобразования никак нельзя использовать функцию StrLen, т.к. она работает со строкой типа PAnsiChar.

Небольшой пример:

// Пример:
// 1. Вводим в Edit1: TEdit строку
// 2. Нажимаем кнопку или еще чего (можно и в обработчик
// Edit1.OnChange поставить
// 3. Получаем результат в Edit2: TEdit

var
  mm: PAnsiChar;
begin
// Преобразуем строку типа String в PAnsiChar
  mm:= PAnsiChar(Edit1.Text);
// Чтобы получить длину с помощью StrLen
// все работает

  Edit2.Text:= IntToStr(StrLen(mm));
// ..........................................
// Через StrPas:

  Edit2.Text:= IntToStr(Length(StrPas(mm)));
end;
Ответ отправил: Denisss (статус: Специалист)
Ответ отправлен: 15.04.2006, 13:11
Оценка за ответ: 4
Комментарий оценки:
Спасибо Вам тоже.
Но мне уже прислали правильный ответ до Вас.
Но оценку ставлю за полноту раскрытия ответа.


Вопрос № 40.272
Здравствуйте! Мне нужна ваша помощь. У меня есть класс TSonEdit - наследник стандартного TEdit. По примерам я собрал вот это(см. приложение). Работает нормально. Но я не понимаю, как. Объясните, пожалуйста, что делает строчка "Parent := self;" и зачем конструктору Create параметр self? /Я проверял, без указания self и без строчки "Parent := self;" выдается ошибка. Заранее спаибо!!!

Приложение:

Отправлен: 14.04.2006, 11:52
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Андрющенко Вячеслав Васильевич!

При Create Вы указываете владельца компонента - то есть того, кто будет его разрушать (вызывать его Destroy).
Строкой Parent := Self Вы указаваете, что форма (Ссылка на ее экземпляр внутри ее методов - неявный параметр Self каждого метода) будет управлять поведением компонента - давать ему команду на прорисовку, например.
Владелец и родитель могут не совпадать, но в Вашем случае они совпадают
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 2-ой класс)
Ответ отправлен: 14.04.2006, 11:59
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное!

Отвечает: Kazakh
Здравствуйте, Андрющенко Вячеслав Васильевич!
Идеология Object Pascal подразумевает, что у каждого экземпляра класса должен быть родитель, даже если сам у себя родетель.

Вызывая TSonEdit.Create(Self) вы создаете экземпляр класса, а с помощью Self указываете владельца. То есть сам себе хозяин. Можно не указывать и передавать nil.
В справке сказано: Self указывает на объект из которого этот метод вызывается.

А вот Parent задать обязательно надо. Он указывает экземпляру в ком он содержится, то есть где ему появится. Если укажете Self, то появится на форме, так как сам на себе он не появится и по умолчнаию выбирается контрол на уровень выше.
И nil здесь не прокатит. Можно, например, если на форме есть panel, указать panel. Тогда ваш едит появится не на форме, а на панели :-), извиняюсь за каламбур.

З.Ы.: Немного не по-русски :-), но не судите строго - я не русский :-)
---------
Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 6-ой класс)
Ответ отправлен: 14.04.2006, 12:19


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

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

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

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

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

В избранное