Здравствуйте! Подскажите пожалуста как можно сделать компонент на основе TCustomEdit, что-бы в нем была возможность отображения разноцветного текста (как например в TRichEdit). Может у кого есть готовый компонент? Помогите Please!!! Заранее спасибо.
Здравствуйте, Andrey! в TCustomEdit это по моему не возможно можно сделать при помощи TRichedit отключаем кнопки вниз вверх ЕНТЕР размеры делаем подобоющие и все похож на Едит а на самом деле РичЕдит Ответ отправлен: 29.10.2003, 20:28 Отправитель: Cybernetic Creature Отвечает Артём Шегеда
Здравствуйте, Andrey!
Проблема раскраски текста, в принципе, решается использованием TRichEdit, однако, в ряде задач использование компоненты с возможностью редактирования текста не оправдано. Я сначала использовал ThtmlLite - мощная компонента для отображения HTML-текста, который можно загрузить как из файла, так и сгенерировать динамически. Позже попробовал TRichView - очень удобная компонента для отображения статического текста (со вставками изображений) с использованием стилей. Обе компоненты freeware. Взять можно на Torry.NET Ответ отправлен: 28.10.2003, 13:14 Отправитель: Артём Шегеда Отвечает sir henry
Приветствую Вас, Andrey! Нужно заглянуть на: www.torry.net www.delphimaster.ru www.delphikingdom.com там самые большие сборники компонентов. Ответ отправлен: 28.10.2003, 09:29 Отправитель: sir henry Отвечает THE_PRO
Здравствуйте, Andrey! Takoy komponent yest v http://programmersheaven.com Ответ отправлен: 28.10.2003, 09:08 Отправитель: THE_PRO
Вопрос № 1069
Уважаемые эксперты, здравствуйте. У меня есть несколько вопросов: 1) Как удалить все файлы и папки (включая вложенные) с диска "А", т.е. флоппика? 2) Как скопировать и удалить файл с любой директории? 3) Как обнулить кэш флоппика? (Этот вопрос я уже задавал, но ответ так и не получил).
Здравствуйте, Стафеев Сергей! { Здесь я привожу немного сокращенный код, который я создавал для Borland Pascal 5.5 под DOS (оригинальный код не делал rmDir, поэтому вы можете поэкспериментировать с этим, передав указатель на каталог функции rmDir в конце этого кода). Я подозреваю, что Delphi-версия может быть или идентичной, или иметь некоторые различии в написании имен функций (рекомендую ознакомиться с электронной документацией по Delphi, с темой, где описаны функции для работы с файлами). Данный код не предусматривает проверку атрибутов файлов, которые могут быть установлены для предотвращения удаления файла. (В Pascal 5.5 вам необходимо между парой {$I-}{$I+} {поместить функцию, которая вызывает проблему, не знаю, делаете ли вы это в Delphi.) } procedure removeTree(DirName: string); var FileSearch: SearchRec; begin
{ для начала пробегаемся, и удаляем все файлы } chDir(DirName); FindFirst('*.*', Directory, FileSearch); while (DosError = 0) do begin if (FileSearch.name <> '.') and (FileSearch.name <> '..') and ((FileSearch.attr and Directory) <> 0) then begin if DirName[length(DirName)] = '' then removeTree(DirName + FileSearch.Name) else removeTree(DirName + '' + FileSearch.Name); ChDir(DirName); end; FindNext(FileSearch) end; { затем пробегаемся, и удаляем все каталоги } FindFirst('*.*', AnyFile, FileSearch); while (DosError = 0) do begin if (FileSearch.name <> '.') and (FileSearch.name <> '..') then Remove(workdir); end; FindNext(FileSearch) end; rmDir(DirName) end; Ответ отправлен: 29.10.2003, 20:32 Отправитель: Cybernetic Creature Отвечает CJ
Добрый день, Стафеев Сергей! Используй простые процедуры удаления файлов! Чтобы скопировать-CopyFile! А про кэш тебе уже отвечали, что надо использовать API-функцию! Ответ отправлен: 28.10.2003, 22:16 Отправитель: CJ Отвечает Boriss
Доброе время суток, Стафеев Сергей! 1) Два варианта: а) создайте текстовый файл, напишите в нем format a:, или del a:*.*, сохраните как .bat файл и запустите хотя бы WinExec. Второй смотри в приложении 2) Находить файлы и MoveFile также, как в предыдущем 3) Кэш флопика? Зачем?
Приложение: Ответ отправлен: 29.10.2003, 09:32 Отправитель: Boriss Отвечает samum2000
Здравствуйте, Стафеев Сергей! 1. Чтобы очистить диск, можно использовать процедуру deletedir (см. приложение) 2. Для копирования файла я предлагаю воспользоваться процедурами windows (не забудь указать в Uses модуль ShellApi)
Приложение: Ответ отправлен: 30.10.2003, 11:05 Отправитель: samum2000 Отвечает sir henry
Добрый день, Стафеев Сергей! В модуле WinAPI есть хорошая функция для файловых операций: SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; Структура TSHFileOpStruct довольно большая, ленюсь его описывать :), самые главные в данном случае поле: wFunc - тип производимой операции: FO_COPY копировать файл. FO_MOVE переместить файл. FO_DELETE удалить файл. FO_RENAME переименовать файл. pFrom - указатель на строку с именем исходного файла. Ответ отправлен: 29.10.2003, 07:22 Отправитель: sir henry
Вопрос № 1070
Уважаемые ЭКСперты! Здрасте... :) Подскажите плз как получть список всех папок в дирректории программы. Заранее спасиобо..
Добрый день, D.M.! var F: TSearchRec; Path: string; Attr: Integer; begin Path := 'e:audio'; Attr := faDirectory; FindFirst(Path, Attr, F);
if F.name <> '' then begin ListBox1.Items.Add(F.name); while FindNext(F) = 0 do ListBox1.Items.Add(F.name); end; FindClose(F); end.
Ответ отправлен: 29.10.2003, 20:32 Отправитель: Cybernetic Creature Отвечает sir henry
Доброе время суток, D.M.! С помощью функций: FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; FindNext(var F: TSearchRec): Integer; FindClose(var F: TSearchRec); TSearchRec - это запись сведения о файле, attr - набор аттрибутов файла, path - путь с шаблоном поиска. Первая функция ищет первый файл по заданному шаблону, фторая функция продолжает поиск, третья - поиск завершает.
Приложение: Ответ отправлен: 29.10.2003, 06:53 Отправитель: sir henry Отвечает samum2000
Здрасьте, D.M.! :) Во-первых, вам надо определить путь к папке вашего приложения. Это делается при помощи функции paramstr(0). Во-вторых, используя функции findfirst и findnext с аттрибутами faDirectory получаете список всех папок в дирректории программы.
Ответ отправлен: 30.10.2003, 11:02 Отправитель: samum2000 Отвечает Boriss
Приветствую Вас, D.M.! Сначала узнаем, откуда запущена программа. Можно: 1) GetDir(0, S); S - string 2) S:=ExtractFileDir(ParamStr(0)); Затем S:=S+'*.*'; и sr: TSearchRec; и как описано в примере для FindFirst, но со вторым параметром faDirectory. В конце не забудьте FindClose(sr);
Приложение: Ответ отправлен: 30.10.2003, 16:53 Отправитель: Boriss
Вопрос № 1071
Уважаемые эксперты!! Огромное ВАм спасибо за помощь и терпение к таким чайникам как я.Если позволите задам еще вопрос.Есть идея сделать термометр но чтобы температура отображалась как на самописце т.е. рисовался некий график и возможно ли это сделать не слишком углубляясь в дебри языка т.к. я много еще не понимаю(в голове опилки и длинные слова меня только растраивают).И если не трудно киньте ссылку на кокой нибудь электронный учебник для чайников. С уважением Антон.
Приветствую Вас, антон! >возможно ли это сделать не cлишком углубляясь в дебри языка Это зависит от того, насколько функциональным ты хочешь сделать свой термометр. В любом случае, если не найдешь подходящих компонент, придется освоить рисование на канве (TCanvas). >И если не трудно киньте ссылку на кfкой нибудь электронный учебник >для чайников Не хотелось бы тебя огорчать, но лично я в I-net'e не всречал стоящих учебников :( Ответ отправлен: 30.10.2003, 11:05 Отправитель: samum2000 Отвечает Boriss
Доброе время суток, антон! На закладке Additional есть компонент Chart. Очен удобен для решения Вашей задачи. Как его применять, есть пример в Demos/TeeChart. Насчет электронного чего-нибудь: много есть, например, www.delphimaster.ru
Ответ отправлен: 29.10.2003, 08:52 Отправитель: Boriss Отвечает sir henry
Приветствую Вас, антон! Если вопрос стоит в том, что необходимо накапливать данные с термометра, а потом показывать их в виде графика, то необходимо изучит работу с базами данных и рисование. Вот ссылки: www.masterdelphi.ru - сборник статей и компонентов www.delphikingdom.com - сборник статей и компонентов www.delphiworld.narod.ru - сборник статей Ответ отправлен: 29.10.2003, 08:55 Отправитель: sir henry
Вопрос № 1072
Уважаемые эксперты!! Это опять я.Почему у бестолкового не рисуется линия. Спасибо.
Здравствуйте, антон! Это опять я. Наверное, надо было обрабатывать не OnCreate, а OnPaint. Во всяком случае в справке написано "Any special painting on the form should be done in this event" (т.е. все рисования должны проводится в обработчике этго события), хотя в обработчиках событий типа OnClick можешь спокойно рисовать. Ответ отправлен: 30.10.2003, 10:59 Отправитель: samum2000 Отвечает Boriss
Приветствую Вас, антон! Формы, как таковой еще нет. Нужно делать это, по крайней мере, в procedure TForm1.FormPaint(Sender: TObject); begin Form1.Canvas.LineTo(20,50); end; Ответ отправлен: 29.10.2003, 08:26 Отправитель: Boriss Отвечает Cybernetic Creature
Приветствую Вас, антон! MoveTo(20,50); LineTo(80,80); Ответ отправлен: 29.10.2003, 20:33 Отправитель: Cybernetic Creature Отвечает sir henry
Добрый день, антон! Наверно Вы ее слишком рано рисуете. Попробуйте ввести процедуру рисования не во время, а после создания формы :). Ответ отправлен: 29.10.2003, 08:08 Отправитель: sir henry
Вопрос № 1073
Может кто подскажет - при создании компонента, надо убедиться, что компонент создаваемого типа на форме в единственном числе. Для этого: constructor TMyComponen.Create( AOwner: TComponent ); var i: integer; begin for i := 0 to aOwner.ComponentCount - 1 do if AOwner.Components[i] is TMyComponen then raise Exception.Create( 'The form has already one ' + ClassName ); inherited; ... //создание переменных end; Но при этом, в режиме csDesigning вместо моего сообщения об ошибке появляется абсолютно другое сообщение, а в runtime режиме, выдаётся моё сообщение, а затем, минуя обработчик исключений(!), попадает в destructor. Есть какой-нибудь более пристойный способ?
ps: пока остановился на том, что вместо вызова исключения, вызываю: self:=AOwner.Components[i];
exit;
Добрый день, Владимир! 1. Какое сообщение выдается во время разработки? 2. Ваше сообщение - это 'The form has already one '? Так у Вас нет никакого обработчика исключений. Raise создает исключение, а обрабатывает исключение блок try .. except или try .. finally. Raise Вам нужно использовать внутри одного из этих блоков, тогда пойдет в работу кусок кода который расположен между except .. end или finally .. end. Разумнее было бы завести счетчик компонентов. И тогда, при создании нового компонента, проверять счетчик и, по результатам проверки, предпринимать то или иное действие :). Ответ отправлен: 30.10.2003, 04:55 Отправитель: sir henry
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.