Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

заNILить форму после Close;   Найти похожие ветки 

 
DVM ©   (2008-08-23 11:00) [120]


> А ты еще поразмышляй.


допустим, опять же, есть такой модуль:

unit WinVersion;

interface
var
 WinVersion: string;

function GetWinVersion: string;  

implementation

....

initialization

WinVersion := GetWinVersion;

end;


Как препятствует повторному использованию этого кода переменная WinVersion ?


 
Leonid Troyanovsky ©   (2008-08-23 11:03) [121]


> Loginov Dmitry ©   (23.08.08 10:57) [118]

> А поизвращеннее ничего нельзя было придумать? Нормально,
>  я тихо мирно хочу показать форму на экране и продолжить
> дальше свою обработку. Вызываю TMyForm.Create().Show. Так
> мало того что Show второй раз не сработает, так и дальнейная
> обработка не выполнится, и я даже не увижу причину. Ужас!

Все в твоих руках, и показ исключений в том числе.
А что ты собирался Show, если форма не создана?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-08-23 11:09) [122]


> DVM ©   (23.08.08 11:00) [120]

> Как препятствует повторному использованию этого кода переменная
> WinVersion ?

А что ты собирался использовать?
И еще, секция инициализации - это тоже не самая хорошая
задумка борландов.

--
Regards, LVT.


 
Loginov Dmitry ©   (2008-08-23 11:16) [123]

глобальные переменные - MD
DLL - лажа
секция инициализации - г..но

как нам вообще удается на дельфи что-то программировать?


 
DVM ©   (2008-08-23 11:16) [124]


> А что ты собирался использовать?

А неужели не видно? Я собрался использовать во различных программах этот модуль, а точнее его глобальную переменную WinVersion для получения текущей версии Windows в текстовом представлении, например. На месте версии Windows могло быть что угодно, это не важно.


 
DVM ©   (2008-08-23 11:17) [125]


> И еще, секция инициализации - это тоже не самая хорошая
> задумка борландов.

давайте не отвлекаться от сути, так в какие проблемы с повторным использованием кода [120]?


 
DVM ©   (2008-08-23 11:19) [126]


> И еще, секция инициализации - это тоже не самая хорошая
> задумка борландов.

Для эстетов:

unit WinVer;

interface
var
WinVersion: string;

procedure InitializeModule;  
function GetWinVersion: string;  

implementation

....

procedure InitializeModule;
begin  
 WinVersion := GetWinVersion;
end;

end;


 
@!!ex ©   (2008-08-23 11:23) [127]

> как нам вообще удается на дельфи что-то программировать?

Так и не удается... ПОэтому здесь половина народу пишет на С++, Шарпе и Яве.


 
Loginov Dmitry ©   (2008-08-23 11:27) [128]

> Все в твоих руках, и показ исключений в том числе.
> А что ты собирался Show, если форма не создана?


Я так и понял, что предлагаемый Вами код для практических задач не годится.

собственно можно сделать классовый метод и описать создание формы в нем:

class function TBaseForm.GetForm(AOwner: TComponent): TMyForm;
var
 i: Integer;
begin  
 for i := 0 to Screen.FormCount - 1 do
   if Screen.Forms[i].ClassType = Self then
   begin
     Result := Screen.Forms[i] as Self;
     Exit;
   end;

 Result := Self.Create(AOwner);
end;


 
Leonid Troyanovsky ©   (2008-08-23 11:34) [129]


> Loginov Dmitry ©   (23.08.08 11:27) [128]

> Я так и понял, что предлагаемый Вами код для практических
> задач не годится.

Зависит от задач.


 
Leonid Troyanovsky ©   (2008-08-23 11:37) [130]


> Leonid Troyanovsky ©   (23.08.08 11:34) [129]

> Зависит от задач.

Sorry, промахнулся по кнопе.

> собственно можно сделать классовый метод

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

Но, как я понял, идея усвоена.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-08-23 11:43) [131]


> DVM ©   (23.08.08 11:19) [126]

> Для эстетов:

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

И речь шла об объектах в модулях, содержащих
глобальные переменные.

--
Regards, LVT.


 
Тын-Дын ©   (2008-08-23 12:46) [132]


> Германн ©   (23.08.08 02:36) [110]
>
> > Тын-Дын ©   (23.08.08 02:02) [109]
> >
> >
> > > Palladin ©   (22.08.08 20:35) [105]
> >
> >
> > Хорошо сказано.
> >
> > Добавлю, что нужно быть очень осторожным и не скатываться
>
> > к догматизму во всём.
> >
>
> Не забудь  и сказать, что кажный оператор begin должен сопрвождаться
> оператором end.


Для тебя специально:

Не забудь, что руки перед едой нужно мыть.


 
{RASkov} ©   (2008-08-23 12:57) [133]

Ну хватит вам.... как маленькие :)


 
DVM ©   (2008-08-23 14:25) [134]


> Почему переменная в интерфейсной секции, если
> можно вызвать функцию, возвращающую нужную строку.
>

Я уже писал почему переменная может быть удобнее функции. Например если функция выполняется долго, а значение требуется в разных местах программы часто. Причем значение не меняется по ходу работы программы.


> Пока я не вижу, чего, собс-но, нужно повторно пользовать.

Код этого модуля, написанный единожды можно ПОВТОРНО ИСПОЛЬЗОВАТЬ В РАЗНЫХ ПРОЕКТАХ. Я в этом контексте понял. Или вы о каком другом понимании повторного использования говорите?


> И речь шла об объектах в модулях, содержащих
> глобальные переменные.
>

Речь шла о том что глобальные переменные (любые) - абсолютное ЗЛО и MD! Это ваши слова. В этой и соседней ветке. Ну и какой вред от глобальной переменной, что я привел? Правильно, никакого, а только сплошное удобство. И не согласиться с этим можно только из нежелания признавать очевидный факт.


 
Leonid Troyanovsky ©   (2008-08-23 15:02) [135]


> DVM ©   (23.08.08 14:25) [134]

> Я уже писал почему переменная может быть удобнее функции.
>  Например если функция выполняется долго, а значение требуется
> в разных местах программы часто. Причем значение не меняется
> по ходу работы программы.

Чудак-человек. Переменные от констант отличаем?
Ну, пусть это будет глобальная переменная, но незачем ее тянуть наружу. Наружу должна торчать функция, возвращающая значение оной переменной, чего тут долгого?

Хотя, это все полумеры, но уж меньшее зло.

> Речь шла о том что глобальные переменные (любые) - абсолютное
> ЗЛО и MD! Это ваши слова.

Про абсолютное зло - это не мое.
И кричать на нас не надо.

> согласиться с этим можно только из нежелания признавать
> очевидный факт.

Не хочешь думать - не думай.
Чужим умом не проживешь.

--
Regards, LVT.


 
Игорь Шевченко ©   (2008-08-23 15:03) [136]

Тын-Дын ©   (23.08.08 12:46) [132]


> Не забудь, что руки перед едой нужно мыть.


Че, отпуск кончился, можно троллить с новыми силами ?


 
DVM ©   (2008-08-23 16:22) [137]


> Leonid Troyanovsky ©   (23.08.08 15:02) [135]


> Ну, пусть это будет глобальная переменная, но незачем ее
> тянуть наружу. Наружу должна торчать функция, возвращающая
> значение оной переменной, чего тут долгого?
>

Согласен, так можно, был уверен, что так скажете, но зачем плодить лишние сущности? Плюс ко всему, а вдруг нам понадобится иметь возможность и менять значение этой глобальной переменной извне? Сделаем еще одну функцию? И того вместо одной сущности - три. Правильно, в этом случае вообще надо уж класс городить и делать переменную свойством в этом классе, а вышеупомянутые функции туда методами. Не слишком ли наворочено для всего лишь одной переменной? А если переменных таких 10? Будем делать 10 классов, 20 функций. Как хотите, но вы меня не переубедили.


> Про абсолютное зло - это не мое.
> И кричать на нас не надо.

Сами начали писать MD заглавными буквами в разных ветках.


> Не хочешь думать - не думай.
> Чужим умом не проживешь.

Чужим это вашим что ли? Вы мыслите догмами, которые сами себе выдумали и навязываете другим. На этом обсуждение заканчиваю ибо убедительных доводов против глобальных переменных я до сих пор не услышал - так болтология одна.


 
Leonid Troyanovsky ©   (2008-08-23 16:43) [138]


> DVM ©   (23.08.08 16:22) [137]

> лишь одной переменной? А если переменных таких 10? Будем
> делать 10 классов, 20 функций.

Удивительная беспомощность.

> убедительных доводов против глобальных переменных я до сих
> пор не услышал

А я и не приводил никаких доводов, бо они очевидны любому,
знакомому с основами программирования.
Я обратил внимание лишь на одно обстоятельство, осмыслить
которое ты не сумел или не захотел.

Ну, жизнь научит.

--
Regards, LVT.


 
Тын-Дын ©   (2008-08-23 17:27) [139]


> Игорь Шевченко ©   (23.08.08 15:03) [136]
> Тын-Дын ©   (23.08.08 12:46) [132]
>
>
> > Не забудь, что руки перед едой нужно мыть.
>
>
> Че, отпуск кончился, можно троллить с новыми силами ?


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


 
Renegat ©   (2008-08-23 19:58) [140]

Глобальные переменные не есть абсолютное зло. Да и с чего бы? Наоборот, они, отъедая совсем немного от секции данных, экономят не только операцию выделения под них стэка при вызове функции (и его освобождения при выходе, кстати), но и собственно место в стэке. Конечно, не стоит этим злоупотреблять, и юзать их только когда кончаются регистры.


 
Германн ©   (2008-08-23 20:06) [141]


> стэка

- Вот послал бог дурака уполномоченного по копытам! - Сердился Остап. - Ничего поручить нельзя. Купил машинку с турецким акцентом.
(с:)


 
Renegat ©   (2008-08-23 20:08) [142]

упс. Туплю, звиняйте... о_0
ЗЫ: забыл где нахожусь %)


 
Anatoly Podgoretsky ©   (2008-08-23 21:53) [143]

> Renegat  (23.08.2008 20:08:22)  [142]

А теперь еще узнай и что такое стек. Тут уже не туплю пахнет.


 
@!!ex ©   (2008-08-23 22:08) [144]

> [143] Anatoly Podgoretsky ©   (23.08.08 21:53)

А в чем вопрос? Типа смещение указателя стэка операция не тратящая времени?


 
Anatoly Podgoretsky ©   (2008-08-23 22:28) [145]


> @!!ex ©   (23.08.08 22:08) [144]

> но и собственно место в стэке.

А ты тоже не представляешь как работает стек? Как можно в нем место съекономить, по сравнению с глобальными переменными?


 
@!!ex ©   (2008-08-23 22:33) [146]

> А ты тоже не представляешь как работает стек?

Насколько мне известно: стэк - это заранее выделенный кусок памяти по которой перемещается указатель.
Память в стэке - это фигня. Потому что чтобы сейчас переполнить стэк - нужно очень постаратся.
А вот время на перемещени указатиеля не нулевое, и на этом омжно сэкономить, если идет частое обращение к переменной.


 
Плохиш ©   (2008-08-23 22:39) [147]


> @!!ex ©   (23.08.08 22:33) [146]

А можно, пожалуйста, слово "стек" писать правильно? А то глаза режет.


 
@!!ex ©   (2008-08-23 22:45) [148]

> [147] Плохиш ©   (23.08.08 22:39)

Неужели Stack произносится как стек?? И где же в слове Stack звук "е"??


 
Плохиш ©   (2008-08-23 22:47) [149]


> Неужели Stack произносится как стек?

А, понял, поколение компютикус, "как слышится, так и пишется"... Всё ухожу, здесь мне делать нечего...


 
Anatoly Podgoretsky ©   (2008-08-23 22:47) [150]

> @!!ex  (23.08.2008 22:33:26)  [146]

Вот именно, что заранее выделеный кусок и использование локальных переменных приводит к уменьшению потребности в памяти, а не наоборот, как написано у Ренегата. Поскольку стек повторно используемый. Про указатели речь не шла, а адресация относительная, позиционно-независимая, относительно фрейма стека. И память выделять не надо, так же и освобождать.


 
@!!ex ©   (2008-08-23 22:49) [151]

> [149] Плохиш ©   (23.08.08 22:47)

В данном случае пишу так, как есть транскрипция с английского(оригинального) языка.
На основании какого правила вы считаете, что правильно - "е"?
Я всегда рад исправить свои ошибки. Но пока ошибки не вижу.


 
Smile   (2008-08-23 22:50) [152]

А еще разумнее будет открыть ветку Мастеров (с авторством тех кого этот вопрос интересует) по этой проблеме, поскольку автор давно покинул "дискуссию".


 
Anatoly Podgoretsky ©   (2008-08-23 23:09) [153]

Не интересует, переменные никогда не обнуляю после использования, поскольку никогда повторно не использую. Если нужен гарантированое знание есть ли форма, то восспользуюсь надежным решением, вместо ламерского. А профессиональное решение в использование Screen.Forms


 
Германн ©   (2008-08-24 00:26) [154]


> @!!ex ©   (23.08.08 22:49) [151]
>
> > [149] Плохиш ©   (23.08.08 22:47)
>
> В данном случае пишу так, как есть транскрипция с английского(оригинального)
> языка.

А при чём тут транскрипция? Транскрипция описывает произношение, а не написание.
> На основании какого правила вы считаете, что правильно -
>  "е"?
На основании принятого в современном русском языке написания.


 
Anatoly Podgoretsky ©   (2008-08-24 00:45) [155]

> Германн  (24.08.2008 0:26:34)  [154]

Дети запомните правило

булька, вилька пишутся без мягкого знака,
а сол с мягким.


 
Германн ©   (2008-08-24 00:59) [156]


> Anatoly Podgoretsky ©   (24.08.08 00:45) [155]

Похоже на анекдот. Кстати неплохой. Сам придумал?


 
Anatoly Podgoretsky ©   (2008-08-24 01:04) [157]

> Германн  (24.08.2008 0:59:36)  [156]

Ни, грузинская мудрость.


 
Германн ©   (2008-08-24 01:21) [158]


> Anatoly Podgoretsky ©   (24.08.08 01:04) [157]

Это провокация?
:)

Вспоминаю давний монолог Хазанова про "воронье" яйцо :)
И ещё вспоминаю нашего (в МИФИ) преподавателя урматов. Грузина по национальности. Имя Отчество уже забыл, но фамилию помню. Бицадзе. Кстати у него есть по крайней мере один очень хороший учебник или сборник задач по урматам.
Так вот он несколько раз вспоминал, как посещал общагу по велению парткома.
"Ви думаете, что они там учатся? Нет. Они там все пияные валяются!".:)


 
Anatoly Podgoretsky ©   (2008-08-24 01:47) [159]

> Германн  (24.08.2008 1:21:38)  [158]

Это про произношение, грузины просто под руку попали, как самое наглядное пособие.


 
Renegat ©   (2008-08-24 01:54) [160]

> [150] Anatoly Podgoretsky ©   (23.08.08 22:47)

Вот именно что относительно фрейма. Я так думаю что вряд ли кадр (фрейм, если угодно) стэка можно создать, не смещая ESP. Ведь даже если делать как-то наподобие
DWORD PTR [ESP-4*(k-1)], k є N
то первый же PUSH затрёт какую-нибудь переменнную.

А вот то что при отказе от глобальных переменных памяти тратится меньше - это неправда. Её требуется ровно столько же. и то при условии что количество размещаемых данных кратно 4 байтам. Скажем, есть у нас процедура. Она размещает в стэке 4х байт. Если бы она разместила их в .data - при её выполнении никакой разницы по затратам памяти бы не было.
А вот вообразим рекурсивную процедуру. Допустим, она, используя свои локальные переменные, вычисляет на основе переданных параметров некоторые значения, и несколько раз передаёт себе же управление, при этом в стэке, пока не выполнен RETN по адресу возврата, будут храниться все её локальные переменные - уже бесполезные. Здесь, имхо, гораздо выгоднее юзать глобальные (или, при возможности, регистры), которые могут быть заново использованы при каждом проходе функции.

Вот что я имел в виду под экономией.

В принципе, Дядя Толя тоже прав - в общем случае никакой экономии не получится.
Однако существует море частностей, которые кстати очень часто встречаются.

ЗЫ: Простите, если что, за нетрезвый вид =)



Страницы: 1 2 3 4 5 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.83 MB
Время: 0.023 c
9-1173275349
ElectriC
2007-03-07 16:49
2008.10.05
DirectX движок


15-1218472441
Анонимщики
2008-08-11 20:34
2008.10.05
Шахматы


2-1219927692
DJones
2008-08-28 16:48
2008.10.05
Событие MouseMove и всплывающее окно.


3-1207287705
Oruc
2008-04-04 09:41
2008.10.05
Проблема с Юникод (Delphi 6 +ADOStoredProc+TNTEdit+MS SQL 2005)


1-1199531227
ras122
2008-01-05 14:07
2008.10.05
помогите с работой с мышкой, пожалуйста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский