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

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


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

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

Выпуск № 404
от 05.03.2006, 13:09

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


Вопрос № 36326: Посмотрите пожалуйста код в приложении. Где я допустил ошибку? Я пытаюсь навесить общий обработчик на все Edit-ы. При нажатии F8 должен быть заменен текст на 'OK'. Я с указателями в Дельфи не очень дружу (все больше на CBuilder-е приходится писать). ...
Вопрос № 36334: Здравствуйте! Есть ли такая книга где описано все все все о Delphi? Спасибо!...
Вопрос № 36361: Здравствуйте господа программисты. Проблема такая: мне надо программно скопировать часть текста из RichEdit в DBRichEdit сохраняя форматирование, я использую такой метод RichEdit1.CopyToClipboard; DBRichEdit1.PasteFromClipboard;//выделение ...
Вопрос № 36363: Кто сможет разжевать мне всё о FindFile DeleteFile и т.д Я непонимаю как с ними обращаца !!! Вот всё понимаю а етого не понимаю для чего нужен Допустим если я хочу найти и удалить файл для чего мне прописывать <b...
Вопрос № 36374: Доброе время суток Эксперты. У меня возник вопрос связанный с буфером обмена. Подскажите команды пожалуйста которые помещали данные в буфер обмена, и команды которые извлекали эту информацию. Заранее спасибо....
Вопрос № 36390: Здравствуйте, эксперты. Вот пишу программку - Чат по книге «Делфи глазами хакера». Кидаю на форму компоненты IdUDPClient и IdUDPServer. Скажите пожалуйста, где у меня ошибка. По книге все точно также!. Делфи 7. Единственное я решил, что у меня Делфи ...

Вопрос № 36.326
Посмотрите пожалуйста код в приложении. Где я допустил ошибку? Я пытаюсь навесить общий обработчик на все Edit-ы. При нажатии F8 должен быть заменен текст на 'OK'. Я с указателями в Дельфи не очень дружу (все больше на CBuilder-е приходится писать). Заранее спасибо.

Приложение:

Отправлен: 27.02.2006, 16:11
Вопрос задал: Rusland (статус: Специалист)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jadd
Здравствуйте, Rusland!
Sender нужно заменить на Self (аналог this в с++) без @.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 27.02.2006, 16:16

Отвечает: Bochvarov NikB
Здравствуйте, Rusland!

надо изменит (replace)
RE:=TEdit.Create(@Sender)
RE.Text:='OK';
RE.Free;
на
if Sender is tEdit then begin
tEdit(Sender).Text := 'OK';
end;
Ответ отправил: Bochvarov NikB (статус: 6-ой класс)
Отправлен: 27.02.2006, 16:35
Оценка за ответ: 5
Комментарий оценки:
Спасибо. То что нужно.

Отвечает: sir henry
Здравствуйте, Rusland!
Если речь идет только о проверке нажатия F8, то в строке:
if ((Key=VK_F8)and(Shift<>[ssShift])) then
часть "and(Shift<>[ssShift]))" явно лишняя. Правильно будет так:
if Key=VK_F8 then
В процедуре AutoReplace Вы создаете новый компонент типа TEdit, в качестве владельца которого указываете другой TEdit. Это зачем? Совершенно непонятно что она должна делать. И вообще непонятно, для чего нужна эта процедура. И заданного вопрпоса видно, что у Вас на форме несколько Edit'ов и для проверки нажатия F8 в каждом Edit'е Вы хотите использовать одну и туже процедуру. Для этого просто укажите в каждом событии этих компонентов название уже существующей процедуры и все.
По поводу Вашей недружбы с указателями. Объект (Sender у Вас) используется в том виде, в каком он и представлен. Брать его адрес ошибка.
Учитывая то, что смысл того, что должна делать эта процедура совершенно непонятен, то невозможно что-либо посоветовать по этому поводу.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.02.2006, 17:46

Отвечает: Злоумышленник
Здравствуйте, Rusland!
Надо так:
// Процедура замены текста у вызывающего Edit-а
procedure AutoReplace(Sender: TObject);
begin
TEdit(Sender).Text:='OK';
end;
Нет сейчас Delphi под рукой, сам не проверял, поэтому если не работает, пиши в форум
---------
Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 3-ий класс)
Отправлен: 27.02.2006, 19:16

Отвечает: Leshiy2006
Здравствуйте, Rusland!Замените @Sender на Self,а вообще зачем нужна доп. процедура?
Ответ отправил: Leshiy2006 (статус: 3-ий класс)
Отправлен: 27.02.2006, 22:55

Отвечает: Ataman N. N.
Здравствуйте, Rusland!
Напишите так
procedure AutoReplace(RE: TEdit);
begin
RE.Text:='OK';
end;
А процедуру обработки нажатия клавиши измените так:
procedure TForm1.Edit11KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Key=VK_F8)and(Shift<>[ssShift])) then
begin
AutoReplace(Sender as TEdit);//передаете, что Sender как TEdit
{или вместо верхней строки просто напишите
(Sender as TEdit).Text:='OK';}
end;
end;
Ответ отправил: Ataman N. N. (статус: 8-ой класс)
Отправлен: 28.02.2006, 16:48
Оценка за ответ: 5
Комментарий оценки:
Хороший вариант. Спасибо.


Вопрос № 36.334
Здравствуйте!
Есть ли такая книга где описано все все все о Delphi?
Спасибо!
Отправлен: 27.02.2006, 17:49
Вопрос задал: BatanRus (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, BatanRus!
Я с первой версии юзал дельфи на протяжении многих лет и не видел ни одной книги, которая охватывала бы все все все. Была книга с претензией на это, но это было для версии 3. Последние версии не отслеживал, но все так же сомневаюсь, что таковые есть.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 27.02.2006, 17:55

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

Такой книги не существует, Потому что Delphi это не только оболочка для разработки, но и громадное количество библиотек компонентов, разработанные различными группами программистов.
ЕСть хорошие книги:
Стив Тейксейра, Ксавье Пачеко "Руководство разработчика" (по разным версиям 8, 6, 5)
Марко Кэнту "Delphi 7(6,4) для профессионалов"
Эти два книги охватывают 90% задач, которые встречаются при обычной разработке.
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Отправлен: 27.02.2006, 18:10

Отвечает: Tamashev Denis M
Здравствуйте, BatanRus!
Обезательно скачай Delphi глазами Хакера !
Да всего ты не найдёшь но многое узнаешь из книг !!!
Ответ отправил: Tamashev Denis M (статус: 1-ый класс)
Отправлен: 27.02.2006, 20:11


Вопрос № 36.361
Здравствуйте господа программисты. Проблема такая: мне надо программно скопировать часть текста из RichEdit в DBRichEdit сохраняя форматирование, я использую такой метод
RichEdit1.CopyToClipboard;
DBRichEdit1.PasteFromClipboard;//выделение устанавливается заранее
текст копируется но без форматирования.
Заранее благодарен.
Отправлен: 27.02.2006, 23:03
Вопрос задал: Leshiy2006 (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

А поле в которое ты копируешь поддерживает форматирование?
А при копировании в ClipBoard ты указываешь в каком формате нужно записывать данные?
Попробуй вручную проделать эти операции - попробуй вставить из Clipboard в Word и Блокнот. Посмотри что будет и многое будет ясно.
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Отправлен: 27.02.2006, 23:20
Оценка за ответ: 4
Комментарий оценки:
DBRichEdit форматирование поддерживает


Вопрос № 36.363
Кто сможет разжевать мне всё о
FindFile
DeleteFile
и т.д
Я непонимаю как с ними обращаца !!!
Вот всё понимаю а етого не понимаю
для чего нужен
Допустим если я хочу найти и удалить файл
для чего мне прописывать

p: array[0..max_path] of char;
s: string;
sr: tsearchrec;
Массивы ???
s---->строка она для чего нужна ???
И наверное сомое главное ето sr: tsearchrec; ---------> он для чего нужен он чтото хранит ???
Отправлен: 27.02.2006, 23:18
Вопрос задал: Tamashev Denis M (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Tamashev Denis M!
FindFirst()+ Findnext() - ищут файлы по заданной маске и с заданными аттрибутами.
Если файл найден, то заполняется структура типа TSearchRecord данными о файле. Далее поиск по шаблону можно проводить с помощью FindNext().
DeleteFile() удаляет файл по его имени.
Var
sr: TSearchRec;
Begin
If FindFirst('*.exe', faAnyFile, sr) Then
DeleteFile(sr.Name);
While FindNext(sr)=0 Then
DeleteFile(sr.Name);
End;
В этом примере в текущем каталоге ищутся все файлы с расширением EXE и если находятся, то удаляются.
*******************
Уточните, что значит "разжевать все..." и что такое "и т.д."?
Помните, что правильно заданный вопрос - 50% ответа.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 28.02.2006, 07:36
Оценка за ответ: 5
Комментарий оценки:
Молодец !!!
Уважаю 8) !!!

Отвечает: Diman_A
Здравствуйте, Tamashev Denis M!
Вот тебе кусок, позволяющий искать файлы.
private
FFileName: string;
procedure FindFiles(APath: string);
procedure Tform1.FindFiles(APath: string);
var
FSearchRec,
DSearchRec: TSearchRec;
FindResult: integer;
item:tlistitem;
function IsDirNotation(ADirName: string): Boolean;
begin
Result := (ADirName = '.') or (ADirName = '..');
end;
begin
FindResult := FindFirst(APath + FFileName, faAnyFile + faHidden +
faSysFile + faReadOnly, FSearchRec);
try
while FindResult = 0 do
begin
showmessage (LowerCase(APath + FSearchRec.Name));
{вместо предыдущей строки вставляешь то, что хочешь делать с найденным файлом}
FindResult := FindNext(FSearchRec);
end;
FindResult := FindFirst(APath + '*.*', faDirectory, DSearchRec);
{если тебе нужен поиск во вложенных папках, то убери скобки в след. блоке}
{while FindResult = 0 do
begin
if ((DSearchRec.Attr and faDirectory) = faDirectory) and not
IsDirNotation(DSearchRec.Name) then
FindFiles(APath + DSearchRec.Name); // Recursion here
FindResult := FindNext(DSearchRec);
end;}

finally
FindClose(FSearchRec);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FFileName := ('*.*');
findfiles ('c:');
end;
end.
А вот про Tsearchrec:
Unit
SysUtils
type
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;
Т.е. Tsearchrec - это поисковая переменная, в которую заносятся данные о найденном файле.
Удалить файл: deletefile(filename)
Ответ отправил: Diman_A (статус: 6-ой класс)
Отправлен: 28.02.2006, 16:33
Оценка за ответ: 4
Комментарий оценки:
Ну я просил не кусок етих кусков у меня у самого завались мне нужно обьяснение !!!


Вопрос № 36.374
Доброе время суток Эксперты. У меня возник вопрос связанный с буфером обмена. Подскажите команды пожалуйста которые помещали данные в буфер обмена, и команды которые извлекали эту информацию.
Заранее спасибо.
Отправлен: 28.02.2006, 07:22
Вопрос задала: Шишлянникова Анисия Николаевна (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей

uses Clipbrd;
...
var C: TClipboard;
...
C:=TClipboard.Create;
C.Open;
Form1.Caption:=C.AsText; //Прочитать данные
C.AsText:=`hello!`; //Поместить данные
C.Close;
C.Free;


---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 28.02.2006, 07:45

Отвечает: Leshiy2006
Здравствуйте, Шишлянникова Анисия Николаевна!
1-й вариант:
uses ...Clipbrd;

var
Form1: TForm1;
cl:TClipboard;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
cl:=Tclipboard.Create;
cl.AsText:=Edit1.Text;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
cl.Free;
end;
2-й вариант:
если есть текстовое поле (Tedit и т.д.)
выделяете ручками или программно и пишете
Edit1.CopyToClipboard;
Удачи!
Ответ отправил: Leshiy2006 (статус: 3-ий класс)
Отправлен: 01.03.2006, 23:32


Вопрос № 36.390
Здравствуйте, эксперты. Вот пишу программку - Чат по книге «Делфи глазами хакера». Кидаю на форму компоненты IdUDPClient и IdUDPServer. Скажите пожалуйста, где у меня ошибка. По книге все точно также!. Делфи 7. Единственное я решил, что у меня Делфи неправильный . Ошибку выдает в строчке
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);.
Пишет: [Error] Unit1.pas(15): Undeclared identifier: 'TIdSocketHandle'. Это после того когда объявляеш переменную (любую) в блоке (см.пример) в данном случае - i:integer.

Приложение:

Отправлен: 28.02.2006, 12:12
Вопрос задал: Int20h (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Int20h!
Глюк наверное. :)
Добавте в строке USES модуль IdSocketHandle, где собственно этот тип (TIdSocketHandle) и объявлен и будет Вам счастье. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 28.02.2006, 12:34

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

Добавь в Uses ScktComp, Этот идентификатор объявлен там
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Отправлен: 28.02.2006, 12:39

Отвечает: Злоумышленник
Здравствуйте, Int20h!
Надо в uses дописать idSocketHandle. Еле нашёл, за это Delphi и не люблю.
---------
Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 3-ий класс)
Отправлен: 28.02.2006, 23:40


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

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

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

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

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

В избранное