Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сорри за нубский вопрос, но нигде не нашел точного ответа: условный идентификатор, определенный директивой {$DEFINE} видим только в модуле, в котором определен или во всех модулях проекта?
 
Добавлено:
Сорри, поторопился, голова уже не варит - просто написал тестовое приложение и сам все увидел.
Хорошо, а существует способ ввести, так сказать, глобальный условный идентификатор?

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 21:24 14-12-2008
NOwlar



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
 
Конечно, есть. В опциях проекта  
 для D7: Directories/Conditionals -> Conditional defines
 для D2009: Delphi Compiler -> Conditional defines
 
Вообще, есть распространенная практика, когда в каждом модуле в начале ставят директиву

Код:
{$I defines.inc}

а уже внутри файлика defines.inc собираются все директивы {$DEFINE}

Всего записей: 170 | Зарегистр. 25-01-2006 | Отправлено: 22:23 14-12-2008 | Исправлено: NOwlar, 10:59 15-12-2008
DmitryKz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NOwlar
Спасибо за ценную информацию!

Всего записей: 3144 | Зарегистр. 29-09-2005 | Отправлено: 01:50 15-12-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DmitryKz
Второй вариант (NOwlar) лучше, потому что в первый есть неявное ограничение в длину. Например, в "Conditional defines" никогда не сможете указать все директивы для TRichView.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:18 15-12-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Так, получилось. Только пока заметил один недочет. Вот например тот же самый вызов MessageBox. В момент появления кнопка рисуется нажатой и появляется окно от сообщения. Если закрыть окно - кнопка вдавлена. Как бы эдак в овнердраве корректно учесть и такое условие? Вот например у меня такой недоделанный проект. Код есть в архиве.
http://webdrive.avtograd.ru/Download/Explorer/temp/test.zip
И такой вопрос. Вот в винампе например когда быстро тыкаешь на кнопку - прорисовка мгновенная, а тут с тормозами какими-то. И ведь системные кнопки также быстро могут принимать состояния нажатости/отжатости при быстром на них тыканьи, а тут...
И может у вас есть код для создания собственного трекбара? Просто я хочу сделать скиновый слайдер. Системный просто не подойдет в этот проект, хотя бы тем что очень тупо делается задний фон и если нулевую кисть в статик возвращать нужно, то системный трекбар просто выглядит черным прямоугольником.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 12:21 15-12-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
И такой вопрос. Вот в винампе например когда быстро тыкаешь на кнопку - прорисовка мгновенная, а тут с тормозами какими-то.

На винамп не смотри, там монстры писали его. Плюс к этому в последнем винампе (который 5) нет оунердро контролов, насколько я помню там одни регионы.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 15:59 15-12-2008 | Исправлено: ShIvADeSt, 16:00 15-12-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Такс, вот мне и нужно хоть посмотреть что там за регионизация. Чей думаю можно как-нибудь сделать код для прорисовки таким образом одной кнопки, а дальше дело времени... Хотя бы подкиньте ссылок если знаете.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 18:47 15-12-2008
diodio



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Извините, как принято говорить, за ламерский вопрос, но...
Как узнать, существуют ли компоненты, динамически созданные в процессе работы программы?
Или же - как корректно все созданное удалить при завершении работы?

Всего записей: 111 | Зарегистр. 26-12-2006 | Отправлено: 23:52 15-12-2008
Yozj



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
Родитель компонента сам позаботится об удалении своих детей, так что позаботиться надо только о том, чтобы у компонента был родитель, и если родитель самописный - написать в деструкторе удаление потомков.

Всего записей: 125 | Зарегистр. 01-12-2004 | Отправлено: 01:07 16-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
Yozj
Те компоненты которые мы видим на стадии дизайна создаются и разрушаются самостоятельно. Если компонент a1 создан с родителем a2 следующим образом a1:=TMyComponent.Create(a2), то он тоже освобождается автоматически, так как ничем не отличается от компонентов дизайна. Если комнонент создан так:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  a1 := TMyComponent.Create(NIL);
end;

 
То освобождается он в:

Код:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(a1);
end;

 
Если это не компонент, а класс типа TStringList, то он создаётся по мере необходимости и освобождается тут же:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  L1: TStringList;
begin
  L1 := TStringList.Create;
  try
    L1.LoadFromFile('...');
    L1.Delete(0);
    Memo1.Text := L1.Text;
  finally
    L1.Free;
  end;
end;

 
А так же чтобы разобраться с подобными вопросами, берётся любая книга по Delphi, читаются начальные главы, и всё пробуется в тестовом приложении. Так же неплохо было бы заглянуть в папочку Borland\Delphi N.0\Demos.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:36 16-12-2008 | Исправлено: delover, 10:02 16-12-2008
diodio



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2 delover, спасибо.
К сожалению, в тех книгах, что я читаю сейчас о дельфях, этой проблемме не уделено внимания, а разобраться хочется. Поэтому и спрашиваю Если не могу найти ответ по книгам, королевству и гуглю )

Всего записей: 111 | Зарегистр. 26-12-2006 | Отправлено: 11:03 16-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
Насчитал четырнадцать книг на полке над головой, к сожалению для меня в них мало толку.
 
Occidit miseros crambe repetita magistros.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:16 16-12-2008
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
Если хочешь глубоко копнуть Delphi, то посоветую:
"Delphi для профессионалов"  Марко Канту и Рея Лишнера "Секреты Delphi 2". (немного староватая версия Делфи, но концептуально не устарела. М.б. com-технологии не раскрыты, но изнанка Делфи представлена на отлично).
Пишу названия по-памяти, для уточнения погугли по авторам, но если серьезно решил заняться - не пожалеешь. Я в свою бытность многое из них почерпнул...
 
 
Добавлено:
По Канту не могу точно вспомнить, возможно что-то вроде "Мастера Delphi". Если актуально, завтра уточню.

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 11:41 16-12-2008
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
покажите пожалуйста как запустить эту процедуру
 

Код:
 
Procedure TForm1.ThisISHowIPutFilesIn ;
var  
  ABigFileStream, SomeSmallFiles : TMemoryStream ;  
 
begin  
  ABigFileStream := TMemoryStream.Create ;  
  try  
    SomeSmallFiles := TMemoryStream.Create ;  
     try
      SomeSmallFiles.LoadFromFile('C:\SomeSmalFile1.txt');  
      AddToStream(SomeSmallFiles,ABigFileStream);  
      SomeSmallFiles.LoadFromFile('C:\SomeSmalFile2.txt');  
      AddToStream(SomeSmallFiles,ABigFileStream);  
      // enz  
     finally  
      SomeSmallFiles.Free ;  
     end;  
  ABigFileStream.SaveToFile('C:\MrBig.DDD')  
  finally  
  ABigFileStream.free ;  
  end;  
end;  
 
Procedure TForm1.AddToStream ( Source , Dest : TStream );  
var  
Size : Integer ;  
begin  
Source.position := 0 ;  
// Сохраняем размер, помещая его в первый байт
Size := Source.Size ;  
Dest.Write(Size,SizeOf(Integer));  
Dest.CopyFrom(Source,Source.size);  
end;  
 
 

В public процедуры прописал но что то не хочет выполняться подскажите как её запустить?
 

Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 11:55 16-12-2008
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OOD
А где ты (по какому событию) вызываешь процедуру? Где точка входа?

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 12:33 16-12-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ymg2000
Приятно слышать про Марко, и особенно Рея. Марко для меня Хрестоматия, а Секреты D2 это уже Библия (если можно так сказать). Список литературы потдерживаю на все 100%.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:23 17-12-2008
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ymg2000

Цитата:
А где ты (по какому событию) вызываешь процедуру? Где точка входа?

вот весь код:
Подробнее...
 

Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 09:11 17-12-2008 | Исправлено: OOD, 09:12 17-12-2008
ymg2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OOD
У тебя процедура вызывается при создании формы. Судя по тексту процедуры визуально ты ничего не увидишь, впечатление какой-то недоделанности.

Всего записей: 2391 | Зарегистр. 24-08-2007 | Отправлено: 09:47 17-12-2008
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ymg2000
Да не могу понять как пользоваться этой процедурой взял её отсюда:
 
http://www.delphisources.ru/pages/faq/base/stick_several_files_and_break_apart.html
 

Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 09:49 17-12-2008
diodio



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
2 ymg2000, delover
 
Спасибо за литературу - уже скачал и распечатал. У Марко Канту вообще много тем, закрывающих мои "белые пятна".
Если есть еще подобное - просьба посоветовать.
Так же приветсвуются ссылки на веб-ресурсы.
 
Заранее спасибо, ребята!

Всего записей: 111 | Зарегистр. 26-12-2006 | Отправлено: 11:16 17-12-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru