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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 172
от 06.07.2005, 01:24

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 15


Вопрос № 22886: Здравствуйте! MDI приложение, есть кнопка в родительском окне, которая должна запускать функцию активного дочернего окна. Т.е. надо сделать примерно как в word-е щелкаешь по кнопке "выравнивание" текс в активном окне выравниваеться, щел...
Вопрос № 22908: SheLListView1.root:=edit1.text; Почему не работает?Как сделать чтобы работало?...
Вопрос № 22916: Доброе время суток эксперты! Как говориться "Век живи век учись". Пишу чат и возник вопрос по ToolBar'aм, короче почему в Delphi Тулбар просто из монотонного цвета? А если смотреть на другие приложения сделанные в VC++, VB и.т.п то ...

Вопрос № 22.886
Здравствуйте!
MDI приложение, есть кнопка в родительском окне, которая должна запускать функцию активного дочернего окна. Т.е. надо сделать примерно как в word-е щелкаешь по кнопке "выравнивание" текс в активном окне выравниваеться, щелкаешь "увеличить шрифт" он увеличиваеться. Зарание спасибо.
Отправлен: 30.06.2005, 09:20
Вопрос задал: Pnck (статус: Посетитель)
Всего ответов отправлено: 5

Отвечает: sir henry
Здравствуйте, Pnck!
Функция будет зависеть от того компонента который Вы используете для отображения текста. Напишите какой у Вас.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 30.06.2005, 09:37
Оценка за ответ: 4
Комментарий оценки:
Вопрос вообще не в тексте, а в первом предложении!

Отвечает: Jadd
Здравствуйте, Pnck!
Очень просто. Рассмотрим два случая. Первый. Предположим, что дочерние окна у нас одного типа. Тогда задача выполняется так:
var
child: TForm;
begin
child := Form1.ActiveMDIChild;
child.MyMethod;
end;

Естесственно, что child будет показывать только методы TForm. Чтобы увидеть наши методы, нам нужно указатель привести к типу дочернего окна, т.е.
(TMyChild (child)).MyMethod; Хотя компиллер и так сработает.
Второй случай - когда MDI дочки разного типа (например, одна дочка текстовое окно, а другая содержит элементы диалога). В этом случае нам нужно их как-то определять. Тут нам поможет такой подход:

var
child: TForm;
begin
child := Form1.ActiveMDIChild;

if (child is TDialogChild) then
(TDialogChild(child)).MyDialogMethod;

if (child is TWordChild) then
(TWordChild(child)).MyWordMethod;
end;

Хоть эти примеры и вызывают методы, доступ к полям класса производится точно так же. Подробнее читай в разделе посвященном RTTI и ООП.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 30.06.2005, 10:10

Отвечает: Tsechoev Bagaudin
Здравствуйте, Pnck!
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
if FontDialog1.Execute then
(Form1.ActiveMDIChild.ActiveControl as TRichEdit).Font := FontDialog1.Font;
end;
Form1 - это MDI форма. На ней есть FontDialog. На дочерней только RichEdit.
После нажатия кнопки запускается FontDialog выбираешь шрифт, размер, стиль и т.д.
На дочерней форме есть только один control RichEdit поэтому я выбрал свойство ActiveControl если присутствует еще контролы то обращайся по индексу, например:
procedure TForm1.ToolButton1Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to Form1.ActiveMDIChild.ControlCount - 1 do
begin
if Form1.ActiveMDIChild.Controls[i] is TRichEdit then
(Form1.ActiveMDIChild.Controls[i] as TRichEdit).SetFocus;
end;
if FontDialog1.Execute then
(Form1.ActiveMDIChild.Controls[0] as TRichEdit).Font := FontDialog1.Font;
end;
Вроде понятно. Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 6-ой класс)
Отправлен: 30.06.2005, 10:12

Отвечает: Gin

Здравствуйте, Pnck!

procedure TForm1.ALeftExecute(Sender: TObject);
begin
RichEdit1.Paragraph.Alignment:=taLeftJustify;
ALeft.Checked:=true;
end;

procedure TForm1.ACenterExecute(Sender: TObject);
begin
RichEdit1.Paragraph.Alignment:=taCenter;
ACenter.Checked:=true;
end;

procedure TForm1.ARightExecute(Sender: TObject);
begin
RichEdit1.Paragraph.Alignment:=taRightJustify;
ARight.Checked:=true;
end;

procedure TForm1.ABulletExecute(Sender: TObject);
begin
if(ABullet.Checked) then
RichEdit1.Paragraph.Numbering:=nsNone
else RichEdit1.Paragraph.Numbering:=nsBullet;
ABullet.Checked:=not ABullet.Checked;
end;

procedure TForm1.ABoldExecute(Sender: TObject);
begin
ABold.Checked := not ABold.Checked;
if ABold.Checked
then RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style + [fsBold]
else RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style - [fsBold];
end;

procedure TForm1.AItalicExecute(Sender: TObject);
begin
AItalic.Checked := not AItalic.Checked;
if AItalic.Checked
then RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style + [fsItalic]
else RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style - [fsItalic];
end;

procedure TForm1.AUnderlineExecute(Sender: TObject);
begin
AUnderline.Checked := not AUnderline.Checked;
if AUnderline.Checked
then RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style + [fsUnderline]
else RichEdit1.SelAttributes.Style :=
RichEdit1.SelAttributes.Style - [fsUnderline];
end;

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 30.06.2005, 12:20
Оценка за ответ: 4
Комментарий оценки:
Я ничего не понял. Пожалусто, оставьте коментарии.

Отвечает: Denisss
Здравствуйте, Pnck!
В папке <Delphi>DemosDocTextEdit есть отличный пример, как раз на Ваш вопрос
Ответ отправил: Denisss (статус: 8-ой класс)
Отправлен: 01.07.2005, 16:37
Оценка за ответ: 4
Комментарий оценки:
Отличный пример! Но с объяснениями как он устроен было бы вообще шикарно!


Вопрос № 22.908
SheLListView1.root:=edit1.text;
Почему не работает?Как сделать чтобы работало?
Отправлен: 30.06.2005, 16:21
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Gin

Здравствуйте, Sassoft!

Вы нигде не ошиблись? Попробуйте так:

ListView1.Caption := Edit1.Text;

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 30.06.2005, 17:36

Отвечает: Ерёмин Андрей
Здравствуйте, Sassoft!
Вы будете смеяться, но у меня это нормально работает :) Проверьте, верный ли путь вводится в Edit1. Попробуйте взять этот путь в кавычки.
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 30.06.2005, 19:16

Отвечает: Tsechoev Bagaudin
Здравствуйте, Sassoft!
свойство root компонента SheLListView устанавливает начальную директорию для него. И если edit1.text = существуещей на компе директории, то никаких проблем быть не может.
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 6-ой класс)
Отправлен: 01.07.2005, 01:25

Отвечает: streetcat
Здравствуйте, Sassoft!
че это оно не работает? Че говорит? Че вообще-то надо?
точнее задай вопрос.
если нада папку в shelllistview поменять, то должно работать. Если не работает,то значит не в этой строке ошибка.

---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 04.07.2005, 19:02


Вопрос № 22.916
Доброе время суток эксперты!
Как говориться "Век живи век учись".
Пишу чат и возник вопрос по ToolBar'aм, короче почему в Delphi Тулбар просто из монотонного цвета? А если смотреть на другие приложения сделанные в VC++, VB и.т.п то они градиентные.
Вопрос: Как сделать чтоб они были градиентные?
Отправлен: 30.06.2005, 21:46
Вопрос задал: Delphin (статус: 7-ой класс)
Всего ответов отправлено: 6

Отвечает: Jadd
Здравствуйте, Delphin!
Ну, во-первых, есть CoolBar, который позволяет менять бэкграунд бара. Потом у ToolBar есть событие OnCutomDraw, в котором ты можешь определить свой собственный вид тулбара.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 30.06.2005, 22:45
Оценка за ответ: 2
Комментарий оценки:
я знаю про все это. Наверно я не точно задал вопрос надо было спросить что я нетак сделали что поправить. А что в него рисовать можно и менять цвет это я знаю.

Отвечает: Ерёмин Андрей
Здравствуйте, Delphin!
Скачайте какой-нибудь компонент, который делает градиенты и поместите его на toolbar. Один из таких компонентов - TGradient (http://www.delphiarea.com/).
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 01.07.2005, 07:37
Оценка за ответ: 1
Комментарий оценки:
Я спросил как сделать. Наверно понятно что я знаю про всякие компоненты. А теперь запусти Delphi и попробуй поместить туда компонент так чтоб он был под кнопками. А потом советуй. Если так то надо перерисовать весь тулбар.

Отвечает: -[tr1pl3x]-
Здравствуйте, Delphin!, Зайди на www.torry.net, в поиске нипиши "TollBar" (Без ковычек соответственно) и качай. Найдёш себе на вкус и цвет.
Ответ отправил: -[tr1pl3x]- (статус: 1-ый класс)
Отправлен: 01.07.2005, 10:56
Оценка за ответ: 1
Комментарий оценки:
Ты мне ничего не сказал. Наверно из моего статуса (6 класс) видно что я знаю про torry.net и поисковики. Мне нужен стандартный тулбар а не замена.

Отвечает: Denisss
Здравствуйте, Delphin!
Э-Эх!!! И почему это, по Вашему, эксперты должны быть еще и экстрасенсами и читать Ваши мысли на расстоянии?!
Я создал в MS VC++ v.6.0 Enterprize проект, в котором разместил ToolBar и почему-то он не залит никаким градиентом?!
Поэтому буду только пытаться догадываться:
Во-первых, у Вас Windows XP
Во-вторых, у Вас не стандартная тема?! (Например, стоит StyleXP)
В-третьих, у Вас MS VC++, версии > 6.0

Если это так и у Вас стоит Delphi 7 или Выше (но не ниже), то можете исправить ситуацию, положив на форму компоненту TXPManifest (на закладке Win32).

Если у Вас версия Delphi ниже, то Вам придется искать ее заменитель под нее самостоятельно (а такие в интернете мне встречались).

Почему так происходит?!:
Скорее всего, Ваш VC++ добавляет в ресурсы программы этот самый манифест самостоятельно, без участия программиста.
Ответ отправил: Denisss (статус: 8-ой класс)
Отправлен: 01.07.2005, 17:05
Оценка за ответ: 3
Комментарий оценки:
Хотябы что-то написал.
У меня XP стоит стандартная голубая тема и манифест кинут на форму :). Так вот представте себе все решилось компиляцией проекта в Delphi 2005 а не в Delphi 7.

Отвечает: Gin

Здравствуйте, Delphin!

Смотрите приложение.

С Уважением, Gin.

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 01.07.2005, 19:25
Оценка за ответ: 4
Комментарий оценки:
Ну исходник для заливки формы но спасибо все равно. А все уже решилось использованием Delphi 2005 :)))

Отвечает: streetcat
Здравствуйте, Delphin!
Бери обычный тулбар и рисуй градиент на его канве. А вообще поищи тулбары с рисунками и градиентами в сети.

---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 04.07.2005, 19:02


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное