Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие выбора компонентов на форме или панели 
V
    Опции темы
okkonst
Дата 4.10.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.9.2010
Где: Воронеж

Репутация: 1
Всего: 1



Кстати, ответ сильно зависит от того, все ли компоненты являются окнами? То есть, все ли они - потомки TWinControl?

Добавлено через 7 минут и 17 секунд
Цитата

лучше код получения ActiveControl, 
повесить на OnIdle


Мнэ-э... Работать-то оно, конечно, будет. Но могут быть спецэффекты. Если уж хочется 100%, универсально и непробиваемо - вешай локальный хук smile
PM MAIL   Вверх
cat512
Дата 4.10.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Цитата(okkonst @ 4.10.2010,  13:15)
Кстати, ответ сильно зависит от того, все ли компоненты являются окнами? То есть, все ли они - потомки TWinControl?

Добавлено @ 13:22
Цитата

лучше код получения ActiveControl, 
повесить на OnIdle


Мнэ-э... Работать-то оно, конечно, будет. Но могут быть спецэффекты. Если уж хочется 100%, универсально и непробиваемо - вешай локальный хук smile

Ну по условию задачи, человеку надо выбирать(устанавливая фокус) элементы управления!
Компоненты он выбрать не сможет, по причине не визуальности.
На TControl - фокус установить невозможно, только кликнуть.
Остаётся TWinControl
 smile
На OnIdle должно быть всё в шоколаде, не должно быть спецэффектов
PM MAIL   Вверх
okkonst
Дата 4.10.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.9.2010
Где: Воронеж

Репутация: 1
Всего: 1



Цитата

Ну по условию задачи, человеку надо выбирать(устанавливая фокус) элементы управления!


Что-то я про "устанавливая фокус" не нашел в исходном тексте. Более того, по тексту можно предположить (не обязательно), что изготавливается конструктор формы. А там могут быть не только винконтролы. Те же лейблы, к примеру... Другое дело, что для них не сработает OnEnter так же smile

Цитата

На OnIdle должно быть всё в шоколаде, не должно быть спецэффектов


А если параллельные потоки? OCX-компоненты? Потом, ты дашь гарантию, что после клика на компоненте OnIdle наступит достаточно быстро, чтобы юзер не успел ткнуть еще куда-нибудь? Логика программы может быть весьма замысловата... Я бы все-таки пошел по пути установки в рантайме своих обработчиков OnClick (для не-винконтролов) и OnEnter для остальных с вызовом ранее установленных. При условии полной автоматизации этого процесса, он станет совершенно прозрачным, синхронным и не связанным с расчетами координат (при перехвате мыши), не будет зависеть от способа активизации компонента...

Еще мысли про недостаток OnIdle. У нас есть кнопка. У нее в OnClick сидит ее обработчик. Юзер кидает в нее тапком и что происходит:
- клик
- OnClick
- Выполнение обработчика
- Выход из обработчика
- OnIdle 
То есть, мы поймем, что юзер "выбрал" кнопку только после того, как она уже сработает. А это может произойти не скоро...

Это сообщение отредактировал(а) okkonst - 4.10.2010, 16:47
PM MAIL   Вверх
cat512
Дата 4.10.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



 smile 
C тобой интересно общаться, видно человек думающий, но скажем, не обращавший внимание на тонкости VCL.
По порядку:
1  "устанавливая фокус" я вывел методом исключения(см. выше) Просто скорее всего akellka опечатался, оговорив в условии задачки TComponent. Ну это не столь важно.
Цитата

А если параллельные потоки? OCX-компоненты?

Н ураз уж сказал А, то говори и Б. Разворачивай ответ в контексте параллельных потоков и ОСХ.
Покажи, каким образом они могут нам навредить, а я покажу как обойти возникшую проблемму
Цитата

Потом, ты дашь гарантию, что после клика на компоненте OnIdle наступит достаточно быстро, чтобы юзер не успел ткнуть еще куда-нибудь

Даю, даже не я, а разработчики VCL из Borland. Смотри как работает ActionUpdate, и когда наступает OnIdle. И вообще, нам абсолютно не важно как быстро наступит OnIdle. В кон. счёте нам без разницы, сколько кликов сделает пользователь, главное что бы он выбрал, какой нибудь ел. управл., а на OnIdle мы его сдадим кому нужно.
Цитата

Логика программы может быть весьма замысловата

с этим согласен, но мне кажется, ты немного всё усложняешь
Цитата

Я бы все-таки пошел по пути установки в рантайме своих обработчиков OnClick (для не-винконтролов) и OnEnter для остальных с вызовом ранее установленных. При условии полной автоматизации этого процесса, он станет совершенно прозрачным, синхронным и не связанным с расчетами координат (при перехвате мыши), не будет зависеть от способа активизации компонента.

В этом наши подходы с тобой как раз отличаются. Ты размазываешь всю логику по обработчикам сообщения, у меня логика обработки находится в централизованном (водном месте) обработчике, что ведёт к простоте и лёгкости в сопровождении.
Кстати, а где ты увидел расчёт координат, перехват мыши в варианте предложенном мной???
Цитата

То есть, мы поймем, что юзер "выбрал" кнопку только после того, как она уже сработает. А это может произойти не скоро...

И что с того, что она работает/отработала?Зачем искать кошку, там где её нет?Вот когда ТС столкнётся с проблемой производительности, вот тогда и будет пытатся оптимизировать. А что сейчас говорить на абстрактные темы? Можно такого напридумывать, а в реальности окажется, задачка гроша ломанного не стоит.


Это сообщение отредактировал(а) cat512 - 4.10.2010, 23:27
PM MAIL   Вверх
Akella
Дата 5.10.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Есть в onIdle "установить" какой-то код, то не будет ли это сильно сказываться на работе программы и вообще на производительности?
Например, на главную форму приложения кидаем компоненту и там прописываем:
Код

procedure TfmMain.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
  if (fmRTTIInspector <> nil) and (Screen.ActiveControl <> nil) then
    begin
      fmRTTIInspector.Form := GetFormByHandle(Application.ActiveFormHandle);
      fmRTTIInspector.cxRTTIInspector1.InspectedObject := Screen.ActiveControl;
    end;
end;

Получается, что этот код будет выполняться почти постоянно?
PM MAIL   Вверх
cat512
Дата 5.10.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



OnIdle - выполняется когда приложение ПРОСТАИВАЕТ! Другими словами когда у приложения пустая очередь сообщений (это значит что приложение ничего не делает, просто висит), то начинает выполняться OnIdle и соответственно код который там находится. Это нюанс VCL, например в других приложениях, написанных с использованием GetMessage, OnIdle, в режиме пользователя вообще отсутсвует, он работает только в режиме ядра, причём поток всё равно крутит spinLock (цикл), а в этом spinLocke тупо считает количество процессорных тактов. Как только в очереди появится хоть одно сообщение, VCL переводит контекст управления из OnIdle в конкретный обработчик сообшения. Т. е. другими словами, у OnIdle - приоритет выполнения ниже чем у любого обработчика сообщений.
Теперь по сути:
Цитата

Получается, что этот код будет выполняться почти постоянно?

Ну и хай себе выполняется постоянно. Если тебе это не нравится, можешь поставить флажок (я закоментил код с флажком в предыдущих постах) и сбрасывать его когда контрол обновился
Даже лучше не флажок, а так:
Код

implementation
var
  LastActiveControl: TObject;

procedure OnIdle(...)
begin
  if Screen.ActiveControl = LastActiveControl then exit;
  Inspector.Eat(Screen.ActiveControl);
  LastActiveControl := Screen.ActiveControl;
end;

smile

Это сообщение отредактировал(а) cat512 - 5.10.2010, 15:21
PM MAIL   Вверх
Frees
Дата 5.10.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(Akella @  5.10.2010,  17:26 Найти цитируемый пост)
Получается, что этот код будет выполняться почти постоянно?

иногда бывало что из за кода в Идле проц загружался на 100 % 


лучше код в Идле пытаться минимизировать
Код

 if (fmRTTIInspector <> nil) and (Screen.ActiveControl <> nil) then
    begin
      fmRTTIInspector.Form := Application.ActiveForm;//не проще? или так нельзя...
      if fmRTTIInspector.cxRTTIInspector1.InspectedObject <> Screen.ActiveControl then
          fmRTTIInspector.cxRTTIInspector1.InspectedObject := Screen.ActiveControl;//насколько это "тяжелое" присвоение
    end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
cat512
Дата 5.10.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Пожалуй соглашусь с Frees, что в любом случае оптимизация лучше, отсутствие таковой. smile
Единственное хочу отметить один момент:
код в OnIdle будет грузить процессор - если там цикл (что есть неправильно!), или длительное
выполнение системных вызовов (например работа с файловой системой, графикой ...etc), которые требуют переключения контекста между режимом пользователя и режимом ядра.

PM MAIL   Вверх
Akella
Дата 5.10.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



В моём случае Screen.ActiveControl всегда будет cxResizer, т.к. я использую компонент TcxResizer (Cindy Components) для возможности перемещения компонентов по форме и изменения их размеров.

Возможно я откажусь от этих компонентов в пользу других. Пока не знаю.

Добавлено через 6 минут и 18 секунд
На данный момент у мну там сделано: вызываю код начала/окончания редактирования:
Код

  if not cyResizer1.Active then
    begin
      cyResizer1.Activate(TabSheet1); // control Panel2 child controls!
      bControlsChanged := True;
      lbEditDataForbiden.Visible := True;
      actSaveComponentsParams.Visible := True;
      fmRTTIInspector := TfmRTTIInspector.Create(Self);
      fmRTTIInspector.Form := self;
      Application.OnIdle := AppEvents;
      fmRTTIInspector.Show;
    end
  else
    begin
      Application.OnIdle := nil;
      actSaveComponentsParams.Visible := false;
      cyResizer1.Deactivate;
      fmRTTIInspector.Close;
    end;



Код

procedure TfmApartAdd.AppEvents(Sender: TObject; var Done: Boolean);
begin
  if Assigned(fmRTTIInspector) and assigned(fmRTTIInspector.cxRTTIInspector1)  and Assigned(cyResizer1.LastMouseDownControl) then
    begin
      if RttiLastActiveControl = cyResizer1.LastMouseDownControl then exit;
      
      fmRTTIInspector.cxRTTIInspector1.InspectedObject := cyResizer1.LastMouseDownControl;
      fmRTTIInspector.dxStatusBar1.Panels[0].Text := cyResizer1.LastMouseDownControl.ClassName;
      RttiLastActiveControl := cyResizer1.LastMouseDownControl;
    end;
end;



Цитата(Frees @  5.10.2010,  15:04 Найти цитируемый пост)
//насколько это "тяжелое" присвоение

Я не знаю, но думаю, что достаточное тяжёлое, т.к. в cxVerticalGrid грузится полностью вся инфа о выбранном объекте, а на сколько я знаю, то работа с RTTI очень медленная.

Добавлено через 9 минут и 28 секунд
А кто-нибудь работал с компонентами Greatis?
PM MAIL   Вверх
Akella
Дата 5.10.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



И ещё проблема в том, что инспектор ни в какую не хочет видеть изменения, которые я сделал с компонентом на форме. Например я переместил компонент, а инспектор не поменял свойства left и top.
Получается, что то, что предложил Frees
if fmRTTIInspector.cxRTTIInspector1.InspectedObject <> Screen.ActiveControl

Наоборот нужно выполнять принудительно, чтобы инспектор "перечитывал" постоянно свойства инспектируемой компоненты.
PM MAIL   Вверх
Akella
Дата 5.10.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



У TcxResizer есть событие OnClick, которое срабатывает при клике на любой компоненте, которая принадлежит родительской панели. Уже легче smile. Событие OnIdle уже не требуется.


Код

procedure TfmApartAdd.cyResizer1Click(Sender: TObject);
begin
  if Assigned(fmRTTIInspector) and Assigned(cyResizer1.LastMouseDownControl) then
    with fmRTTIInspector  do
      begin
        //инспектор от Greatis
        ComponentInspector1.Instance := cyResizer1.LastMouseDownControl;

        //инспектор от DevExpress
        cxRTTIInspector1.InspectedObject := cyResizer1.LastMouseDownControl;

        dxStatusBar1.Panels[0].Text := cyResizer1.LastMouseDownControl.ClassName;
      end;
end;

PM MAIL   Вверх
cat512
Дата 5.10.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Чёт сразу не подумал, а теперь вспомнил, что у Screen-а есть войство OnActiveControlChange, которое случается при смене фокуса на контроле,  можно с ним поиграться
PM MAIL   Вверх
okkonst
Дата 5.10.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 5.9.2010
Где: Воронеж

Репутация: 1
Всего: 1



Цитата(cat512 @ 4.10.2010,  23:08)
Цитата

А если параллельные потоки? OCX-компоненты?

Н ураз уж сказал А, то говори и Б. Разворачивай ответ в контексте параллельных потоков и ОСХ.
Покажи, каким образом они могут нам навредить, а я покажу как обойти возникшую проблемму
Цитата

Потом, ты дашь гарантию, что после клика на компоненте OnIdle наступит достаточно быстро, чтобы юзер не успел ткнуть еще куда-нибудь

Даю, даже не я, а разработчики VCL из Borland. Смотри как работает ActionUpdate, и когда наступает OnIdle. И вообще, нам абсолютно не важно как быстро наступит OnIdle. В кон. счёте нам без разницы, сколько кликов сделает пользователь, главное что бы он выбрал, какой нибудь ел. управл., а на OnIdle мы его сдадим кому нужно.
Цитата

Логика программы может быть весьма замысловата

с этим согласен, но мне кажется, ты немного всё усложняешь
Цитата

Я бы все-таки пошел по пути установки в рантайме своих обработчиков OnClick (для не-винконтролов) и OnEnter для остальных с вызовом ранее установленных. При условии полной автоматизации этого процесса, он станет совершенно прозрачным, синхронным и не связанным с расчетами координат (при перехвате мыши), не будет зависеть от способа активизации компонента.

В этом наши подходы с тобой как раз отличаются. Ты размазываешь всю логику по обработчикам сообщения, у меня логика обработки находится в централизованном (водном месте) обработчике, что ведёт к простоте и лёгкости в сопровождении.
Кстати, а где ты увидел расчёт координат, перехват мыши в варианте предложенном мной???
Цитата

То есть, мы поймем, что юзер "выбрал" кнопку только после того, как она уже сработает. А это может произойти не скоро...

И что с того, что она работает/отработала?Зачем искать кошку, там где её нет?Вот когда ТС столкнётся с проблемой производительности, вот тогда и будет пытатся оптимизировать. А что сейчас говорить на абстрактные темы? Можно такого напридумывать, а в реальности окажется, задачка гроша ломанного не стоит.

Цитата

Цитата

А если параллельные потоки? OCX-компоненты?

Н ураз уж сказал А, то говори и Б. Разворачивай ответ в контексте параллельных потоков и ОСХ.
Покажи, каким образом они могут нам навредить, а я покажу как обойти возникшую проблемму


Например, активный поток может блокироваться. Тем или иным образом.

Цитата

Даю, даже не я, а разработчики VCL из Borland. Смотри как работает ActionUpdate, и когда наступает OnIdle. И вообще, нам абсолютно не важно как быстро наступит OnIdle. В кон. счёте нам без разницы, сколько кликов сделает пользователь, главное что бы он выбрал, какой нибудь ел. управл., а на OnIdle мы его сдадим кому нужно.


Смотрел. И не раз. OnIdle срабатывает, когда пустеет очередь сообщений. Причем, если очередь разгребалась через HandleMessage (а не через, скажем, самодельный цикл с ProcessMessages) Проблема в том, что это весьма малопредсказуемая штука. Я могу придумать кучу сценариев, когда OnIdle облажается. Смотри. Тачка загружена "по самые помидоры". Кванты нашей задаче отдаются нечасто. Юзеру надоело ждать, пока все "прочихается", он жмет мышой на ТЕдит, топчет ("в буфер") клавиатуру и жмет "ентер", с тем, что когда все прочихается, едит активируется, данные из буфера клавиатуры в него вобьются и нажмется "ок". При этом, OnIdle сработает ПОСЛЕ обработки OK. А возможны и менее пессимистичные сценарии. Мне в твоем подходе не нравится то, что ты используешь событие, логика которого предназначена для другого. Я достаточно далек от сравнения "забивать гвозди микроскопом", но не слишком smile


Цитата

Ты размазываешь всю логику по обработчикам сообщения, у меня логика обработки находится в централизованном (водном месте) обработчике, что ведёт к простоте и лёгкости в сопровождении.


Поправочка: ПО ОБРАБОТЧИКУ. Одному. А то, что вызываться он будет из кучи мест - проблемы не составляет. Ну, плюс ЕЩЕ одна подпрограмма - установщик. 

Цитата

Кстати, а где ты увидел расчёт координат, перехват мыши в варианте предложенном мной???


не в твоем. 

Цитата

И что с того, что она работает/отработала?Зачем искать кошку, там где её нет?Вот когда ТС столкнётся с проблемой производительности, вот тогда и будет пытатся оптимизировать. А что сейчас говорить на абстрактные темы? Можно такого напридумывать, а в реальности окажется, задачка гроша ломанного не стоит.


Во-первых, тут проблема не производительности. В том смысле. что она будет при ЛЮБОЙ скорострельности компа - OnIdle сработает ПОСЛЕ обработчика кнопки. Во-вторых, ты предлагаешь думать об этом, когда заказчик позвонит, и начнет в терминах "я там нажала, а оно выскочило" объяснять проблему?

Добавлено через 2 минуты
Цитата

Чёт сразу не подумал, а теперь вспомнил, что у Screen-а есть войство OnActiveControlChange, которое случается при смене фокуса на контроле,  можно с ним поиграться


А-а!!! Позор на мою седую голову!!! (посыпает пеплом беломора) Ведь сам же юзал... smile
PM MAIL   Вверх
cat512
Дата 6.10.2010, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



smile
PM MAIL   Вверх
cat512
Дата 6.10.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



2okkonst
Цитата

Например, активный поток может блокироваться. Тем или иным образом.

если под ",блокироваться" - понимается DeadLock, то используем механизмы синхронизации,
если нет, то будет ждать своего кванта.
smile
Цитата

Кванты нашей задаче отдаются нечасто. Юзеру надоело ждать, пока все "прочихается", он жмет мышой на ТЕдит, топчет ("в буфер") клавиатуру и жмет "ентер", с тем, что когда все прочихается, едит активируется, данные из буфера клавиатуры в него вобьются и нажмется "ок". При этом, OnIdle сработает ПОСЛЕ обработки OK. А возможны и менее пессимистичные сценарии. Мне в твоем подходе не нравится то, что ты используешь событие, логика которого предназначена для другого. Я достаточно далек от сравнения "забивать гвозди микроскопом", но не слишком

Скажи плиз, почему ты решил что контрол должен здаваться инспектору объектов, до того момента,  как он(контрол)  начнёт обработку сообщения, или скажем  ранее??? Ведь этот момент, завмсит от проблемы предметной области. Если например, этот механизм используется с чисто информативной целью( например для того что-бы тупо отобразить информацию о объекте, на фрэйме детализации),
то использование OnIdle очень даже подходит. Для других вариантов использования, возможны разные варианты реализации. Могу предположить, что для каких-то OnIdle не самый лучший вариант.
Но ТС, спросил "как"! Он ничего не детализировал! Поэтому метафора "забивать гвозди микроскопом", для варианта (тупо отобразить информацию о объекте, на фрэйме детализации). я  бы сказал, не верный. smile
Цитата

Поправочка: ПО ОБРАБОТЧИКУ. Одному. А то, что вызываться он будет из кучи мест - проблемы не составляет. Ну, плюс ЕЩЕ одна подпрограмма - установщик.

Вот как раз что проблемы не вызывает - это
Пару строчек кода в обработчике OnIdle, а тебе как минимум надо написать 2 подпрограммы, плюс постоянно беспокоиться о безопасности (не запорол ли кто в runtime, логику установки обработчиков),
или скажем какой-нить компонент, что то неявно делает с обработчиками)
Цитата

Во-первых, тут проблема не производительности. В том смысле. что она будет при ЛЮБОЙ скорострельности компа - OnIdle сработает ПОСЛЕ обработчика кнопки. Во-вторых, ты предлагаешь думать об этом, когда заказчик позвонит, и начнет в терминах "я там нажала, а оно выскочило" объяснять проблему?

см. выше, зависит от вар. использования




Это сообщение отредактировал(а) cat512 - 6.10.2010, 15:05
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1099 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.