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

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


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

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

Выпуск № 828
от 02.06.2007, 19:35

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


Вопрос № 88902: как сделать чтобы цвет формы не зависел от текущего стиля оформления Windows?...
Вопрос № 88939: К программе подключаеться файл который находиться в папке, которая находиться в папке с программой. Вопрос: можно ли использовать его так же как если бы он был в одной с программой папке, или придеться встроить модуль подключения этого файла?...
Вопрос № 88942: Уважаемые эксперты! Сразу к делу. Вот вопрос: В Delphi 7 хочу создать программу, которая сворачивалась в трей и по нажатию кнопки мыши всплывало Popup menu. Все это сделал, но не знаю как редактировать через запущенную программу (не из Delphi...
Вопрос № 88960: Как запрограмить текстовый редактор с возможностью выравнивания текста ?...
Вопрос № 88965: Добрый день. Подскажите мне пожалуйста как осуществить поиск файлов на всех дисках (имеется ввиду жесткого) по маске. Причем приложение у меня консольное, т.е. запись файлов в ListBox и прочее не нужна! Функция должна работать как FindNext вот то...
Вопрос № 88995: Здравствуйте уважаемые эксперты!У меня на форме Form1 находится StringGrid1 с помощью следующего кода http://www.excode.ru/art2036p8.html я делаю встроенный редактор ComboBox1 в ячейке StringGrid1,но по задумке этим же!!! редактором ComboBox1 я ...

Вопрос № 88.902
как сделать чтобы цвет формы не зависел от текущего стиля оформления Windows?
Отправлен: 28.05.2007, 07:56
Вопрос задал: Kolyan (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Kolyan!
Для этого нужно указать цвет в явном виде, например, clNavy.
При указании цвета через константы, например, clBtnFace, цвет будет менятся пользователем в зависимости от схемы
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 28.05.2007, 08:23
Оценка за ответ: 4

Отвечает: Ерёмин Андрей
Здравствуйте, Kolyan!
Если вы посмотрите на значения списка свойства Color, то увидите, что сначала идут явные стандартные цвета, а затем цвета становятся похожими. Вот вся вторая половина списка (и даже больше) - это исключительно системные цвета. Если использовать их, то цвет формы будет меняться. Задать цвет можно либо с помощью стандартных констант (clRed, clBlue, и т.д.), либо в формате $00BBGGRR. А если, например, вам подходит один из системных цветов, то можно сделать так: выбрать его, затем дважды щёлкнуть по полю этого свойства - откроется стандартный диалог выбора цвета. Если там ничего не изменить и нажать "ОК", то выбранный системный цвет преобразуется в формат, указанный мной выше. В этом случае цвет уже не будет меняться в соответствии с цветовой схемой Windows.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 28.05.2007, 08:40
Оценка за ответ: 5
Комментарий оценки:
вот оно что!!!


Вопрос № 88.939
К программе подключаеться файл который находиться в папке, которая находиться в папке с программой.
Вопрос: можно ли использовать его так же как если бы он был в одной с программой папке, или придеться встроить модуль подключения этого файла?
Отправлен: 28.05.2007, 13:18
Вопрос задал: Diman Soldatov / DES (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Louken
Здравствуйте, Diman Soldatov / DES!

Допустим Ваша программа находиться по адресу C:DirProgq.exe

Чтобы загрузить файл в Memo находящийся в этой же директории, что и программа, т.е. C:DirProg1.txt, достаточно написать:
Memo1.Lines.LoadFromFile('1.txt');

Для файла C:Dir2.txt:
Memo1.Lines.LoadFromFile('..2.txt');

Для файла C:DirText3.txt:
Memo1.Lines.LoadFromFile('..Text3.txt');

Для файла C:PathText4.txt:
Memo1.Lines.LoadFromFile('....PathText4.txt');

Для файла C:DirProgFile5.txt:
Memo1.Lines.LoadFromFile('File5.txt');

Для файла F:Text6.txt:
Memo1.Lines.LoadFromFile('F:Text6.txt');

Надеюсь с этим все в порядке и Вы поняли принцип.
В большинстве случаев проблем Вы не получите, но в языке Pascal (и в Delphi тоже), есть такая процедура ChDir, которая меняет текущюю директорию и код расположенный выше будет работать неправильно. А также, я правда в этом неуверен, диалоговые окна могут менять текущюю директорию, а значит этот метод не является универсальным и в таком случае лучше делать это так, как показано ниже:

var s: string;
begin
s:=ExtractFilePath(Application.ExeName);

//Этот метод загрузит в Memo, файл с именем C:Dir1.txt
Memo1.Lines.LoadFromFile(s+'..1.txt');
end;

Т.е. перед именем файла поставьте перемененную s.
Где ExtractFilePath - функция которая отсекает имя файла и остается только директория (C:DirProg),
Application.ExeName - собственно имя файла с директорией (C:DirProgq.exe)

И если теперь вы перенесете папку Dir (C:Dir) в другое место, то все будет работать также.

Приложение:

Ответ отправил: Louken (статус: 3-ий класс)
Ответ отправлен: 28.05.2007, 16:00
Оценка за ответ: 5

Отвечает: Примак Руслан Николаевич
Здравствуйте, Diman Soldatov / DES!

В дополнение к ответам выше, в ряде случаев, как например, когда вы используете диалоги сохранения/открытия файлов текущая директория работы приложения может меняться. В этом случае, вы можете не найти то, что вы ищете.
Самый надежный способ:

AppDir := ExtractFilePath(Application.ExeName);

MyFileName := AppDir + 'MyDirMyFile.txt';
Ответ отправил: Примак Руслан Николаевич (статус: 2-ой класс)
Ответ отправлен: 29.05.2007, 14:35


Вопрос № 88.942
Уважаемые эксперты!
Сразу к делу. Вот вопрос:
В Delphi 7 хочу создать программу, которая сворачивалась в трей и по нажатию кнопки мыши всплывало Popup menu. Все это сделал, но не знаю как редактировать через запущенную программу (не из Delphi) можно было указать название игры и ее адрес, и чтобы эта программа (название) появилось в Popup menu. Какие компоненты использовать? Какой код писать?
Отправлен: 28.05.2007, 13:39
Вопрос задал: Night User (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gladiator
Здравствуйте, Night User!
Приблизительно можно реализовать так (см. приложение).
Остальное дело техники.
Удачи.

Приложение:

Ответ отправил: Gladiator (статус: 9-ый класс)
Ответ отправлен: 28.05.2007, 14:45


Вопрос № 88.960
Как запрограмить текстовый редактор с возможностью выравнивания текста ?
Отправлен: 28.05.2007, 15:44
Вопрос задал: Морозов (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Louken
Здравствуйте, Морозов!

Если Вам нужен редактор на основе TMemo, то для этого нужно просто изменять свойство Alignment (Memo1.Alignment:=taCenter;).
А если Ваш редактор будет посложнее, на основе TRichEdit, то есть в Delphi7 (на счет других версий не знаю) в каталоге DemosRichEdit (C:Program Files Borland Delphi7 Demos RichEdit), такой проект - программа наподобие стандартного WordPad.
Там реализованы изменение размеров, начертания и имени шрифта, изменение позиции текста, создание списка, есть даже линейка, как в word'e. Также реализованы функции создания документа, открытия, сохранения, печати, работа с буфером обмена и др.
Можете посмотреть как это делается. Также я думаю будет не сложно добавить свои возможности по примеру, например изменение цвета текста и фона.
Ответ отправил: Louken (статус: 3-ий класс)
Ответ отправлен: 28.05.2007, 16:13
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, Морозов!
В RichEdit выравнивание текущего абзаца (именно абзаца, а не всего текста) делается так:

//По левому краю
RichEdit1.Paragraph.Alignment:=taLeftJustify;
//По центру
RichEdit1.Paragraph.Alignment:=taCenter;
//По правому краю
RichEdit1.Paragraph.Alignment:=taRightJustify;

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 28.05.2007, 16:58
Оценка за ответ: 5


Вопрос № 88.965
Добрый день.
Подскажите мне пожалуйста как осуществить поиск файлов на всех дисках (имеется ввиду жесткого) по маске. Причем приложение у меня консольное, т.е. запись файлов в ListBox и прочее не нужна! Функция должна работать как FindNext вот только по всем дискам и папкам.
Заранее благодарен!!!!
Отправлен: 28.05.2007, 16:43
Вопрос задал: Овчинников Николай Владиславович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Кэр Лаэда
Здравствуйте, Овчинников Николай Владиславович!

Вот. все разбил по файлам осталось только сохранить все с нужными именами и откомпилировать, поиск идет рекурсивный, так что если укажете какой нибудь файл на диске Z то соответственно придется подождать

Приложение:

Ответ отправил: Кэр Лаэда (статус: 6-ой класс)
Ответ отправлен: 28.05.2007, 17:32
Оценка за ответ: 5
Комментарий оценки:
Отлично!
Вот только приложение 390Кб, а хотелось бы 44Кб


Вопрос № 88.995
Здравствуйте уважаемые эксперты!У меня на форме Form1 находится StringGrid1 с помощью следующего кода
http://www.excode.ru/art2036p8.html я делаю встроенный редактор ComboBox1 в ячейке StringGrid1,но по задумке этим же!!! редактором ComboBox1 я хочу оперировать и на Form2 вызываемой из Form1.
По Form2.FormShow делаю:
Form1.ComboBox1.Parent:= Form2;
задаю left,top...
Form1.ComboBox1.Visible := True;,но при первом же выборе значений на Form2,ComboBox1 исчезает,хотя значение и заходит в StringGrid1.Исправте пожалуйста мою ошибку.
Отправлен: 28.05.2007, 18:54
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, GAZOT!

Вам достаточно будет добавить условие в котором Вы определяет текущего "родителя" объекта.

Т.е. Вам нужно сделать такие преобразования в выше указанном коде:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
{Перебросим выбранное в значение из ComboBox в grid}
StringGrid1.Cells[StringGrid1.Col,
StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
if ComboBox1.Parent=Form1 then
begin
ComboBox1.Visible := False;
StringGrid1.SetFocus;
end;

end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
{Перебросим выбранное в значение из ComboBox в grid}
StringGrid1.Cells[StringGrid1.Col,
StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex];
if ComboBox1.Parent=Form1 then
begin
ComboBox1.Visible := False;
StringGrid1.SetFocus;
end;

end;


Хотя если Вам фокус необходимо всетаки переводить на StringGrid1, то просто не включайте строку перевода фокуса в блок после условия.

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 28.05.2007, 19:38


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное