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

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


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

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

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

Выпуск № 200
от 05.08.2005, 16:49

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


Вопрос № 24249: Здравствуйте, эксперты. У меня к вам такой вопрос. Значит, на форме fScript у меня валяется PageContainer типа TPageControl. После нажатия на кнопку создается новая страничка типа TMyTabSheet, в которой находится TMyWebBrowser. Описания этих типо...
Вопрос № 24257: Подскажите пожалуйста как мне работать с treeview: мне нужно чтоб отображались иконки как в Хелпах, то есть где есть плюс-чтоб была иконка книжки, а в других местах - иконка листочки. Спасибо!...
Вопрос № 24262: Доброго времени суток. Проблема состоит в том что нужно перехватить и далее использовать сообщение(ия) посланое SendMessage or PostMessage, в дескрипторе окна назначения которого указано не HWND_BROADCAST, а определённое окно. Например: месага типа о...
Вопрос № 24263: Я пиши прогу, которая по горячим клавишам будет создавать новую папку в активном WinExplorer-окне. Как это сделать я пока только предполагаю, но было бы проще если б по той самой гор. клавише моя прога програмно щелкнула бы на кнопку СОЗДАТЬ ПАПКУ на...
Вопрос № 24267: Вопросы по классам: 1-1 Что означает символ "^" при использовании его в имени класса (TMyClass^.Field) в имени свойства (TMyClass.Field^)? при объявлении класса (TMyChildClass^: TMYParentClass; TMyChildClass: ^TMYParentClass;) и т. д.?<...
Вопрос № 24305: Помогите пожалуйста не могу сделать перемещение узла внутри компонента TreeView, если можно дайте пожалуйста исходный код, по исходному коду можно больше понять.......

Вопрос № 24.249
Здравствуйте, эксперты.
У меня к вам такой вопрос. Значит, на форме fScript у меня валяется PageContainer типа TPageControl. После нажатия на кнопку создается новая страничка типа TMyTabSheet, в которой находится TMyWebBrowser. Описания этих типов представлены ниже. Так вот, проблема в том, чтобы расположить TMyWebBrowser на всю страничку. Я это делаю через SetBounds. Но хотелось бы через свойство Align, то есть при изменении размеров странички автоматически менялись размеры TMyWebBrowser. Заранее спасибо.

Приложение:

Отправлен: 30.07.2005, 12:26
Вопрос задал: Repose (статус: 1-ый класс)
Всего ответов отправлено: 2

Отвечает: Denisss
Здравствуйте, Repose!
Ниже (в приложении) один из вариантов решения проблемы...
(прим.: методы и события, которые остались без изменения я не привел, т.к. "а зачем")

Приложение:

Ответ отправил: Denisss (статус: Студент)
Отправлен: 30.07.2005, 13:28
Оценка за ответ: 2
Комментарий оценки:
Пробывал, не получилось.

Отвечает: Tsechoev Bagaudin
Здравствуйте, Repose!
Задай значение свойству Align:=alClient;
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 10-ый класс)
Отправлен: 30.07.2005, 14:14
Оценка за ответ: 2
Комментарий оценки:
Пробывал, не получилось.


Вопрос № 24.257
Подскажите пожалуйста как мне работать с treeview:
мне нужно чтоб отображались иконки как в Хелпах,
то есть где есть плюс-чтоб была иконка книжки, а
в других местах - иконка листочки. Спасибо!
Отправлен: 30.07.2005, 14:50
Вопрос задал: Dadaev Zaur (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Denisss
Здравствуйте, Dadaev Zaur!
В приложении приведен пример. Для работы примера, надо: установить на форму TTreeView, TImageList, в свойстве TreeView1.Images указать ImageList1, добавить в ImageList нужные значки (книжка, листочек). Далее запускайте пример.
Надеюсь, мой пример позволит понять принцип добавления веток к дереву и принцип работы со значками.

PS.
где и какой значок ставить у дерева (т.е., есть ли + или его нет) Вам придется разбираться самому, т.к. у TreeView нет такого свойства, как значок у + и значок без +.

Приложение:

Ответ отправил: Denisss (статус: Студент)
Отправлен: 30.07.2005, 15:32
Оценка за ответ: 5
Комментарий оценки:
Я все понял, спасибо за ответ!!!

Отвечает: Tsechoev Bagaudin
Здравствуйте, Dadaev Zaur!
Если ты пишешь справку, так и скажи. А насчет смены икнонки выделенной ветви, то просто присваешб для свойства SelectedIndex значение индекса иконки, на которую нужно сменить.
А что касается справки, напиши на admin@ingush.com

---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 10-ый класс)
Отправлен: 30.07.2005, 18:22
Оценка за ответ: 5
Комментарий оценки:
Нет я пишу не справку...
Я просто забыл про свойство
SelectedIndex выделенной ветви
Спасибо!!!


Вопрос № 24.262
Доброго времени суток. Проблема состоит в том что нужно перехватить и далее использовать сообщение(ия) посланое SendMessage or PostMessage, в дескрипторе окна назначения которого указано не HWND_BROADCAST, а определённое окно. Например: месага типа очищения названия формы (...,WM_SETTEXT,0,0) (в синтаксисе могу и ошибиться) на все окна класса COWON Jet-audio MainFRM Class от неподконтрольной мне программы.
Отправлен: 30.07.2005, 16:08
Вопрос задал: Infidel (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: Ddeedd
Здравствуйте, Infidel!

Попробуйте поставить хук на WH_CALLWNDPROC или WM_GETMESSAGE через SetWindowsHookEx - чтобы все работало в других процессах надо заключить хук-процедуру в DLL-шку.
Ответ отправил: Ddeedd (статус: 3-ий класс)
Отправлен: 30.07.2005, 20:48


Вопрос № 24.263
Я пиши прогу, которая по горячим клавишам будет создавать новую папку в активном WinExplorer-окне. Как это сделать я пока только предполагаю, но было бы проще если б по той самой гор. клавише моя прога програмно щелкнула бы на кнопку СОЗДАТЬ ПАПКУ на панели в ХР или из контекстного меню! Помогите мне пожалуйста реализовать мой планы!!!
Отправлен: 30.07.2005, 16:15
Вопрос задал: Малярчук Андрей (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Ddeedd
Здравствуйте, Малярчук Андрей!

Я вижу 3 варианта:

1. Сами создаете папку, узнав где сейчас юзер бродит
2. Эмулируете события клавы/мыши - просто маразм - чтобы нажать на СОЗДАТЬ ПАПКУ
3. Находите в меню окно эксплорера пункты Файл-Создать-Папку

Как это сделать:

1. Получаете текущее активное окно - GetForegroundWindow() - Получаете текст его заголовка - GetWindowText() - как можете заметить в заголовке окон Explorerа написан текущий путь, где юзер естьм. Используете CreateDirectory чтобы создать папку. (Еще бы неплохо убедится что это окно - окно эксплорера - либо по имени класса окна (узнайте какой он должен быть), либо по процессу-владельцу окна - сначала получите весь список процессов через CreateToolhelp32Snapshot/Process32First/Process32Next - найдите в нем "explorer.exe" - запомните ID - у окна делаете GetWindowThreadProcessId() - получаете ИД процесса владельца и сравниваете с эксплореровским).

2. Эмулировать события можно через keybd_event() и mouse_event() - но вам придется знать точно где находятся кнопки и пункты меню - как это узнать - думайте сами.

3. Получаете текущ окно - см п.1. - получаете hMenu через GetMenu - потом находите Файл проходя все пункты (кол-во пунктов - GetMenuItemCount) - через GetMenuItemInfo - у файла получаете подменю - MENUITEMINFO.hSubMenu - опять ищите Создать - опять подменю - находите Папку - эмулируете нажатие посылая окну WM_MENUSELECT задавая ИД пункта и hMenu меню Создать и флажок MF_MOUSESELECT.
Ответ отправил: Ddeedd (статус: 3-ий класс)
Отправлен: 30.07.2005, 20:42
Оценка за ответ: 4

Отвечает: Gin

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

Может такой вариант Вам подойдет?

Как создать папку из bat файла

Для создания папки используется команда MKDIR или ее сокращенный аналог MD. Для создания папки из bat файла нужно использовать следующую команду:

MD FolderName

После выполнения такой команды будет создана папка FolderName в папке, откуда запущен bat файл. Чтобы создать файл в отличном от запуска bat файла месте, например в корне диска D, используйте явное указание расположения новой папки. Команда будет выглядеть так:

MD D:FolderName

При создании папок можно пользоваться системными переменными. Например, можно создать в корне диска D папку с именем текущего пользователя. Для этого понадобится переменная %USERNAME%, а команда будет выглядеть следующим образом:

MD D:\%USERNAME%

Можно еще более усложнить команду и создать папку с именем текущего пользователя на системном диске его компьютера. Команда для этого будет выглядеть так:

MD %SYSTEMDRIVE%\%USERNAME%

При создании папок или файлов можно использовать любые системные переменные или их части. Следующий пример демонстрирует создание на системном диске компьютера пользователя папки с именем равным текущей дате.

set datetemp=%date:~-10%
MD %SYSTEMDRIVE%\%datetemp%

Эта конструкция работает следующим образом.
Первая команда создает в памяти переменную datetemp, которая будет уничтожена по окончании работы bat файла. То тех пор, пока bat файл не закончил свою работу есть возможность оперировать со значением этой переменной. Переменной datetemp присваивается 10 символов справа налево от системной переменной DATE, т.е. от текущей даты. Переменная DATE имеет формат Дн ДД.ММ.ГГГГ. Первые символы слева - имя дня недели и поэтому мы их отбрасываем и присваиваем временной переменной datetemp только текущую дату.
Этим не ограничивается список возможностей при создании папок. Вы можете опрерировать переменными так, как удобно Вам, создавая папки с уникальными, легко читаемыми названиями. Получить список всех переменных можно при помощи команды SET.

С Уважением, Gun.
Ответ отправил: Gin (статус: Студент)
Отправлен: 01.08.2005, 19:05


Вопрос № 24.267
Вопросы по классам:
1-1 Что означает символ "^" при использовании его в имени класса (TMyClass^.Field) в имени свойства (TMyClass.Field^)? при объявлении класса (TMyChildClass^: TMYParentClass; TMyChildClass: ^TMYParentClass;) и т. д.?
1-2 Почему где-то написано, что запрещено использовать символ "^" за именем объекта (MyClass^.Field - не правильно, надо - MyClass.Field), где-то наоборот - что надо писать, Из-за чего это?
2-1 Что такое Self (Tmyclass.create(self); self.field;) и как его использовать?
Заранее спасибо за развернутые ответы с ссылками и в примерах
Отправлен: 30.07.2005, 18:23
Вопрос задал: Yujin (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Tsechoev Bagaudin
Здравствуйте, Yujin!
Символ '^' означает указатель и в случае TMyClass^.Field - это обращение к полю, через указатель на класс.
Если обращеаешься к классу, а не к указателю на класс, то ^ этот знак нельзя использовать.
Self - означает, что ты обращаешься к самому классу (предку). Если у тебя есть форма окна, то ты вместо ее имени, можешь набрать self.visible:= flase; - думаю, так будет понятней. А так, между делом, почитай об ООП. Не поймешь чего-нибудь, обращайся, помогут.
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 10-ый класс)
Отправлен: 30.07.2005, 18:36

Отвечает: Denisss
Здравствуйте, Yujin!
1-1. Дело в том, что там, где используется после имени "объекта" символ ^ происходит обращение не к самому классу, а к указателю на память, где расположен объект Вашего класса.
TMyChildClass: ^TMYParentClass; - означает, что класс типа TMyChildClass является указателем на класс TMYParentClass. Чаще всего можно встретить другую запись: PMyClass = ^TMyClass - Р - Pointer, T - Type.
1-2. Как я уже сказал, ^ ставится после указателя на класс. Так что где MyClass не является указателем, там ставить символ не надо. где MyClass - указатель, там надо ставить символ.
2-1. Self используется внутри какого-нибудь класса (например, в форме Form1: TForm1). Удобство использования в том, что, например: у Вас форма называется Form1, Вы же всюду использовали вместо нее Self, теперь Вы можете сколько угодно изменять имя формы и Вам не придется переименовывать ее во всех местах Form1 на Form2, например.
Но, опять же предупреждаю, что Self можно использовать только внутри функций, процедур и методов одного класса.

Приложение:

Ответ отправил: Denisss (статус: Студент)
Отправлен: 30.07.2005, 19:21

Отвечает: sir henry
Здравствуйте, Yujin!
1-1. и 1-2. В общем случае символ "^" обозначает указатель на что-либо (адрес переменной в памяти, указатель на тип данных и т.п.)
Создание переменной на основе какого-либо класса (объекта) автоматически подразумевает выделение места в памяти для него, т.е. работая с объектом, Вы работаете с указателем на самом деле, поэтому если дополнительно поставить символ "^", то получается указатель на указатель.
Если где-то будет написано наоборот - плюнте в глаз этому человеку. :)
Если же указатель применяется у свойства объекта, то тут все зависит от описания объекта, например:
MyClass = class
MyField: pointer;
End;
Здесь поле MyField - это нетипизированый указатель, которому Вы можете присвоить адрес пространства памяти с которого начинается Ваш массив данных, тогда в его использовании без указателя не обойтись:
var
mc: MyClass;
f: file;
Begin
GetMem(mc.MyField, 32); {Выделяем кусок памяти в 32 байта. В MyField Будет его адрес}
AssignFile(f, ]table.dbf'); {Хотим открыть dbf файл}
Reset(f); {Открываем для чтения}
Read(f, mc.MyField^); {Считываем заголовок файла с данными об открываемой таблице}
{Теперь данные, которые находятся по адресу MyField, мы можем разбирать в нужном нам контексте}
End;
Пример, конечно, искуственный, но более жизненый, чем дается в учебниках. :)
2-1. Self - это указатель класса на самого себя (это не казатель для адреса памяти, а как бы объект сообщает "Это я сам и есть - еште меня с хреном").
TMyClass.Create(Self) - создание объекта типа TMyClass у которого хозяин он сам и есть.
Self можно использовать только внутри класса, в методах класса.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 31.07.2005, 16:31


Вопрос № 24.305
Помогите пожалуйста не могу сделать перемещение
узла внутри компонента TreeView,
если можно дайте пожалуйста исходный код,
по исходному коду можно больше понять....
Отправлен: 31.07.2005, 16:31
Вопрос задал: Dadaev Zaur (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Werewolf
Здравствуйте, Dadaev Zaur!
//Запоминаем то что надо перенести в глобальную переменную SL: Integer = -1;
SL := FileView.Selected.AbsoluteIndex;
//Вставляем то что надо куда надо
var
AttachMode: TNodeAttachMode;
begin
AttachMode := naInsert;
//переносим ветку на выбранный элемент
TreeView.Items.Item[SL].MoveTo(TreeView.Selected, AttachMode);
end;
Ответ отправил: Werewolf (статус: 4-ый класс)
Отправлен: 31.07.2005, 16:58

Отвечает: Gin

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

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

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

Приложение:

Ответ отправил: Gin (статус: Студент)
Отправлен: 01.08.2005, 08:26


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

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

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

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

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


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


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

Яндекс


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

В избранное