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

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


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

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

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

Выпуск № 315
от 05.12.2005, 16:24

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


Вопрос № 30460: Здравствуйте, уважаемые эксперты. У меня возникла проблема. Подскажите, пожалуйста, API функцию (если таковая есть) для контроля из моей программы за регулятором громкости в Виндовс. Заранее благодарю за любые ответы....
Вопрос № 30476: Здравствуйте уважаемые эксперты. Как мне сделать чтобы в процедуре или функции написанной мной можно было напрямую использовать компоненты расположеные на форме? Может там куда-то что-то прописать надо? Например procedure someproc; begin ...
Вопрос № 30477: Здарова Эксперты !!! Класно работаете ребята, Спасибо вам за предыдущие ответы!!! А теперь у меня возник следующий вопрос: не могу реализовать конструкцию типа "ели в TwebBrowser загружена определенная странничка например i...
Вопрос № 30478: Здарова Эксперты !!! Еще вопрос подскажите где можно достать электронный учебник или справочник с подробным описанием компонентов(их свойст,событий) с примерчиками на каждый компонент и есть ли такой вообще ??? ...
Вопрос № 30492: Ув Эксперты! Где можно найти хорошое инфо на русском про winapi для delphi А то я из одного форума скачал и запустил она отказывается работать ссылается на ошибку windows.pas почему? ...
Вопрос № 30510: В Delphi существует стандартная комп. TCalendar которая выводит день-месяц-год. Как ее преобразовать чтобы выводился только списик годов?...

Вопрос № 30.460
Здравствуйте, уважаемые эксперты. У меня возникла проблема. Подскажите, пожалуйста, API функцию (если таковая есть) для контроля из моей программы за регулятором громкости в Виндовс. Заранее благодарю за любые ответы.
Отправлен: 29.11.2005, 17:06
Вопрос задал: Sanya (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ataman N. N.
Здравствуйте, Sanya!
Подобные функции находятся в модуле mmsystem.dcu. Есть такой сборник факов - Kuliba, так вот в нем есть пример регулятора громкости, но под Delphi не работает, сам пробовал.
Ответ отправил: Ataman N. N. (статус: 4-ый класс)
Отправлен: 29.11.2005, 17:53
Оценка за ответ: 4

Отвечает: sir henry
Здравствуйте, Sanya!
Слежение за регулятором бессмысленно. Можно сделать свой регулятор и им регулировать уровень громкости.
См. приложение. Пример взят с сайта delphiworld.narod.ru

Приложение:

Ответ отправил: sir henry (статус: Академик)
Отправлен: 29.11.2005, 17:56
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 30.476
Здравствуйте уважаемые эксперты. Как мне сделать чтобы в процедуре или функции написанной мной можно было напрямую использовать компоненты расположеные на форме? Может там куда-то что-то прописать надо? Например
procedure someproc;
begin
Edit1.Text := 'Something';{выходит ошибка E2003 Undeclared identifier: 'Edit1'}
end;
Отправлен: 29.11.2005, 21:19
Вопрос задал: Teapot (статус: Посетитель)
Всего ответов: 12
Мини-форум вопроса >>> (сообщений: 0)

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

Она же тебе написала - "Не знаю я кто-такой Edit1"

Если у тебя Edit1 находится в модуле Unit1 (например на Красной площади)
а процедура someproc находиться в модуле Unit2 (например во Владивостоке)
То нужно же как-то сказать процедуре (а точнее модулю Unit2) где находится Edit1, а также где находится Unit1
Ответ отправил: Архангельский Андрей Германович (статус: Студент)
Отправлен: 29.11.2005, 21:30

Отвечает: Jadd
Здравствуйте, Teapot!
Можно в функцию передать указатель на TForm и там дальше уже использовать массив контролов, и юзать их свойства.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 29.11.2005, 21:31

Отвечает: REFERI
Здравствуйте, Teapot!
Да, кое-что надо добавить:
procedure TForm1.someproc;
begin
Edit1.Text := 'Something';{выходит ошибка E2003 Undeclared identifier: 'Edit1'}
end;
Удачи!
---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 29.11.2005, 22:02

Отвечает: Маренич Владимир
Здравствуйте, Teapot!
Нужно указывать объект-владелец Edit1: например, Form1 (переменная).
Тогда обращение в вашем случае буде выглядеть так:
Form1.Edit1.Text := 'Something';
Ответ отправил: Маренич Владимир (статус: 7-ой класс)
Отправлен: 29.11.2005, 22:29
Оценка за ответ: 5

Отвечает: Schmak
Здравствуйте, Teapot!
Я знаю по крайней мере 2 способа:

1)Явно указать какой форме принадлежит тот или иной компонент.

2)Сначала объявить процедуру в разделе определения класса.
К названию процедуры прибавить Tform1. (в общем название класса формы), после этого внутри процедуры можно без проблем обращаться к компонентам формы и различным глобальным переменным юнита.

Пример смотрите в приложении. Соответствующие процедуры Somedo1 и Somedo2

Приложение:

---------
Не всё то Windows, что висит!

Ответ отправил: Schmak (статус: Студент)
Отправлен: 30.11.2005, 05:34
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Teapot!
Либо введите Вашу процедуру или фцнкцию в состав класса формы:
TForm1 = class(TForm)
...
private
Procedure YourProc(s:string);
End;
Тогда все, что написано в Вашей процедуре можно оставить так, как есть.
Либо напрямую пишите имя формы в этой процедуре:
Form1.Edit1.Text:='Something';
Ответ отправил: sir henry (статус: Академик)
Отправлен: 30.11.2005, 05:56
Оценка за ответ: 5

Отвечает: Vbhjndjhtw
Здравствуйте, Teapot!
Делфя тебе сказала, мол незадекларированный идентификатор переменной.
Надо объявлять переменные.
procedure someproc;
var
a : string; //Объявление переменной
begin
a:=Edit1.Text;
Edit1.Text := 'Something';
end;
P.S Мой совет сначала выучи Turbo Pascal 7.0, а потом уже занимайся объектным програмиорванием.
---------
Бороться и искать, найти и перепрятать!
Ответ отправил: Vbhjndjhtw (статус: 4-ый класс)
Отправлен: 30.11.2005, 08:02
Оценка за ответ: 3
Комментарий оценки:
А вы сами пробовали сделать то что написали?

Отвечает: Vadim Vitomsky
Здравствуйте, Teapot!
Необходимо немного подправить код:

procedure someproc;
begin
Form1.Edit1.Text := 'Something';{выходит ошибка E2003 Undeclared identifier: 'Edit1'}
end;

Иначе процедура просто не видит контрола, который принадлежит форме.
Ответ отправил: Vadim Vitomsky (статус: 4-ый класс)
Отправлен: 30.11.2005, 09:51
Оценка за ответ: 5

Отвечает: Ataman N. N.
Здравствуйте, Teapot!
Для этого нужно указывать полное имя компонента. Ваш пример будет правильным так:
procedure someproc;
begin
<Имя Формы>.Edit1.Text := 'Something';{выходит ошибка E2003 Undeclared identifier: 'Edit1'}
end;

Можно так:

procedure someproc;
begin
with <Имя Формы> do
begin
Edit1.Text := 'Something';{выходит ошибка E2003 Undeclared identifier: 'Edit1'}
Edit1.Text := 'Something';
Panel1.Button1.Caption := 'OK'
end;
end;

Ответ отправил: Ataman N. N. (статус: 4-ый класс)
Отправлен: 30.11.2005, 16:24
Оценка за ответ: 5

Отвечает: Denisss
Здравствуйте, Teapot!
Edit1 - это подкласс формы (Form1, например).
Ошибка происходит именно по этой проблеме. Т.к. Вы пытаетесь обратиться к Edit1 напрямую, а не через форму (Form1.Edit1).
Решения:
1. Обратиться к компоненту через форму: Form1.Edit1.Text
2. Создать процедуру someproc внутри класса формы:

type TForm1 = class(TForm)
  ...
  protected
    procedure Someproc;
  ...
end;
........
procedure Form1.Someproc;
begin
  Edit1.Text:= 'Something';
end;

3. Не совсем, конечно, ответ по теме, но несколько рекомендаций (все эти рекомендации Вы можете прочитать в статье Марко Канту "20 правил ООП в Delphi):
1) Называйте компоненты "говорящими" именами (не Edit1, Button1, а, например, edName, btnOK и т.д.);
2) Не обращайтесь к компонентам напрямую - обращайтесь к ним через свойства формы:

type
  TmyForm = class(TForm);
    edName: TEdit;
  protected
    procedure
SetName(AValue: string);
    function GetName: string;
  public
    property
Name: string read GetName write SetName;
  end;
........
procedure MyForm.SetName(AValue: string);
begin
  edName.Text:= AValue;
end;

function MyForm.GetName: string;
begin
  Result:= edName.Text;
end;

Это позволит Вам в дальнейшем перейти на использование любых типов компонентов (например, у которых будет не свойство Text, а свойство Caption).
Далее, в других местах Вы сможете обращаться к Edit так:
MyForm.Name:= 'Имя';
strName:= MyForm.Name;
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 30.11.2005, 16:36
Оценка за ответ: 5
Комментарий оценки:
Я тоже считаю, что компоненты нужно называть "говорящими" именами, но во время обучения, создавая элементарные программы, на которых максимум десять компонентов обхожусь без говорящих имен :)

Отвечает: Golden Spider
Дело в том что Delphi не видит вашу процедуру.
К ней нужно обращатся через Tform1.someproc.
Смотри пример.

Приложение:

---------
Знания ничто! Хорошие знания Всё!

Ответ отправил: Golden Spider (статус: 2-ой класс)
Отправлен: 30.11.2005, 16:56
Оценка за ответ: 5

Отвечает: CJ
Здравствуйте, Teapot!
Необходимо писать Form1.Edit1.Text := 'Something';
Ответ отправил: CJ (статус: Студент)
Отправлен: 30.11.2005, 18:07
Оценка за ответ: 5


Вопрос № 30.477
Здарова Эксперты !!!
Класно работаете ребята, Спасибо вам за предыдущие ответы!!!

А теперь у меня возник следующий вопрос:
не могу реализовать конструкцию типа
"ели в TwebBrowser загружена определенная странничка например index1.htm то выполнить то или иное действие"

Подскажите пожалуйста как выловить это событие браузера
Отправлен: 29.11.2005, 21:51
Вопрос задал: Andrey_666 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Andrey_666!
У компонента TWebBrowser есть событие OnDownloadComplete, которое происходит когда страничка полностью загружена, используйте его. Удачи.
---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Практикант)
Отправлен: 30.11.2005, 10:17
Оценка за ответ: 5


Вопрос № 30.478
Здарова Эксперты !!!
Еще вопрос
подскажите где можно достать электронный учебник или справочник
с подробным описанием компонентов(их свойст,событий) с примерчиками на каждый компонент
и есть ли такой вообще ???
Отправлен: 29.11.2005, 21:55
Вопрос задал: Andrey_666 (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ujin Antikvar
Здравствуйте, Andrey_666!

Есть неплохая книга Архангельского "100 компонентов общего назначения библиотеки Delphi"

Так же можете смотреть в Help Delphi (могу дать на русском)

Напишите мне на E-mail свое мыло и я вам их вышлю

С Уважением,
Ujin Antikvar!!!

Приложение:

---------
"Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт

Ответ отправил: Ujin Antikvar (статус: 3-ий класс)
Отправлен: 29.11.2005, 23:05
Оценка за ответ: 5

Отвечает: Warrior
Здравствуйте, Andrey_666!
Книгу от Фаронова и Архангельского.
Но это компоненты только стандартного набора.
Кроме того нужно обратить внимание на то, что в набор компонентов отличается от версии к версии.
Ответ отправил: Warrior (статус: 2-ой класс)
Отправлен: 30.11.2005, 05:44
Оценка за ответ: 5

Отвечает: Vbhjndjhtw
Здравствуйте, Andrey_666!
Могу выслать А.Я. Архангельский "100 Компонентов"
Кинь своё мыло.
---------
Бороться и искать, найти и перепрятать!
Ответ отправил: Vbhjndjhtw (статус: 4-ый класс)
Отправлен: 30.11.2005, 07:40
Оценка за ответ: 4

Отвечает: Vadim Vitomsky
Здравствуйте, Andrey_666!
Посмотри на сайте http://delphiplus.org - там много классной документации по дельфям.
Ответ отправил: Vadim Vitomsky (статус: 4-ый класс)
Отправлен: 30.11.2005, 09:55
Оценка за ответ: 5


Вопрос № 30.492
Ув Эксперты!
Где можно найти хорошое инфо на русском про winapi для delphi
А то я из одного форума скачал и запустил она отказывается работать ссылается на ошибку windows.pas почему?
Отправлен: 30.11.2005, 09:32
Вопрос задал: ERA (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vbhjndjhtw
Здравствуйте, ERA!
Скорее всего делфи жалуется на отсутствие файла windows.pas. Скопируй его в ту директорию где находится твой компонент.
---------
Бороться и искать, найти и перепрятать!
Ответ отправил: Vbhjndjhtw (статус: 4-ый класс)
Отправлен: 30.11.2005, 09:41

Отвечает: sir henry
Здравствуйте, ERA!
Тут тока посмеятся остается. Windows.pas - это изложение winapi для применения в Дельфи и нету там никаких ошибок. Только если Выошибочно его применяете. :)
Справка по winapi в транскрипции для Дельфи лежала тут:
http://soobcha.ru/rushelp
Но она сильно неполная. Самая полная инфа - msdn. Ничего лучше нет и быть не может.
Т.е. вы читаете в msdn описание нужной Вам функции, а потом смотрите в windows.pas как она выглядит в Дельфи. По другому никак.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 30.11.2005, 09:50

Отвечает: Vadim Vitomsky
Здравствуйте, ERA!
Попробуй поискать на http://delphiplus.org
Я там много интересной документации скачал!
Ответ отправил: Vadim Vitomsky (статус: 4-ый класс)
Отправлен: 30.11.2005, 10:01

Отвечает: Ujin Antikvar
Здравствуйте, ERA!

Могу дать три книги книги по WinAPI (очень хорошие)

Напиши мне свое мыло и я тебе их вышлю

С Уважением,
Ujin Antikvar!!! arbuznikov@matrix.odessa.ua
---------
"Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт
Ответ отправил: Ujin Antikvar (статус: 3-ий класс)
Отправлен: 30.11.2005, 19:26

Отвечает: REFERI
Здравствуйте, ERA!
У меня есть такое. Если хотите могу выслать на E-mail.
Удачи!


---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 30.11.2005, 21:07


Вопрос № 30.510
В Delphi существует стандартная комп. TCalendar которая выводит день-месяц-год. Как ее преобразовать чтобы выводился только списик годов?
Отправлен: 30.11.2005, 12:41
Вопрос задал: SergBSI (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, SergBSI!
Компонент TCalendar мне неизвестен, но знаю что есть TDateTimePicker, у которого есть свойство Format. Пишем в нем значение "yyyy" и тогда будет отображатся только год (также представляет интерес его свойство DateMode). Удачи.
---------
Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Практикант)
Отправлен: 30.11.2005, 12:48
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, SergBSI!
А при чем тут TCalendar? Засуньте в TComboBox или TListBox сколько Вам нужно годов, и будет Вам их список.
Если я неправильно Вас понял, уточните вопрос.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 30.11.2005, 13:03

Отвечает: Ataman N. N.
Здравствуйте, SergBSI!
А трудно сделать список годов в TComboBox?
Ответ отправил: Ataman N. N. (статус: 4-ый класс)
Отправлен: 30.11.2005, 16:31

Отвечает: Schmak
Здравствуйте, SergBSI!
Не знаю как у Вас , а у меня этот компонент называется TDateTimePicker.
В каком смысле списки (список) годов?
Если нужно. чтобы в строке выпадающего списка был написан только год то в свойстве Format данного компонента пропишите yyyyг.
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 30.11.2005, 16:35

Отвечает: Golden Spider
Здравствуйте, SergBSI!
Ваш вопрос не очень ясен.
Вы хотите получить список лет в виде Tcalendar или что-то другое?
Если да то попробуйте использовать Tlistbox.
Пример внизу.

Приложение:

---------
Знания ничто! Хорошие знания Всё!

Ответ отправил: Golden Spider (статус: 2-ой класс)
Отправлен: 30.11.2005, 17:10

Отвечает: Лучников Юрий Владимирович
Здравствуйте, SergBSI!

Создать на основе этого компонента свой с нужными характеристиками
Ответ отправил: Лучников Юрий Владимирович (статус: 1-ый класс)
Отправлен: 30.11.2005, 18:19


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

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

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

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

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


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


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

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

В избранное