|
Конкурс статей Borland |
|
|
Сообщество ITware |
|
|
|
|
Контакты |
|
Редакция:
Web-мастер:
|
|
Окошко с возможностями фрейма(кадра) и не только... |
13 мая 2003 10:22 drweb |
количество баллов: 86 |
В ранних версиях Delphi не было такого понятия как frames (кадры), но программисты могли использовать для этого стандартные формы. Вы спросите как это? А очень просто: для этого просто нужно после создания формы поменять ей родителя и все ;).
Тоесть, если у меня есть Form1 и Form2, и я хочу чтобы содержимое Form2 было на панели с именем Panel2 формы Form1 то я забираю из файла проэкта (допустим это project.dpr) строчки:
Application.CreateForm(TForm2, Form2);
И вставляю их в главной форме в событие OnShow или по нажатию какой либо кнопки вот так:
// лишнее вырезано :)
Begin
Application.CreateForm(TForm2, Form2);
form2.Parent:=panel2;
form2.Align:=alclient;
form2.borderstyle:=bsnone;
form2.Show;
End;
Таким образом на главной форме в панели Panel2 появится содержимое формы Form2 и мы с Вами сделали форму типа Кадра. Align.oм мы сделали так, чтобы форма заняла всю область панели; Свойство Borderstyle установили в BsNone потому что если б мы этого не сделали то, в форме был бы и заголовок окна Form2 ;) это смотрелось бы примерно так, как будто целая форма2 в панели, но у нее есть заголовок, а он нам вообще сейчас не нужен ;).
А что если в рантайме поменять свойство Parent формы2 в nil?
А будет то, в чем суть всей идеи - это окно перестанет быть ²заложником⌡ панели2 и будет вести себя стандартное окно ?.
Сказали . Сделали: Ставим на форму2 панель с Allign=AlTop, на нее кнопарь, в событии OnClick которого напишем:
form2.Align:=alnone;
form2.BorderStyle:=bssizetoolwin;
form2.Parent:=nil;
form2.windowstate:=wsMaximized;
Поставили свойство BorderStyle в bssizetoolwin, чтобы окно было на окно похоже ?. Но если юзер сейчас нажмет на кнопку Close, то формочка то наша утютю... ? Не дадим ей это сделать:
Ставим в событие OnCloseQuery второй формы:
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if parent=nil then
begin
form2.Parent:=form1.panel2;
form2.Align:=alclient;
form2.borderstyle:=bsnone;
canclose:=false;
end
else canclose:=true;
end;
Тесть форма закроется только в том случае, если у нее есть Parent, а если такового не имеется, так мы его прикрутим назад, и окошко наше опять влезет в панель?.
На основе этой идеи можно делать разные ²фишки⌡ в дизайне своих программ. В большинстве случаев ее можно использовать, когда в какой-то панельке отображается документ с какими-то данными (будь то отчет или картинка), которые могут быть масштабированы и если его плохо видно, то пользователь просто нажмет на кнопку и этот документ появится в отдельном окне распахнут во весь экран.
Одна из идей (на основе FastReport):
Значит есть у нас разные там накладные, счета, короче любые документы, которые мы выписываем не все вместе, а только тогда когда нам это нужно, то есть пришел Вася, сказал: ²Дай мне счет на то и это⌡ - Мы бац бац, данные в таблицу внесли, а потом запустили отчетник и все. А теперь мы хотим пройтись по Васям, Петям, Толям и Нинам и посмотреть какие документы мы им выписали (только без всяких там реестров счетов и так далее. просто нужно и все тут ) Значит смотрим мы на Васю, смотрим на таблички. не красиво ?.
А что если б мы ставали на Васю и сразу б видели его документ? Эту идею разработчики разных репортеров (будь то QuickReport или FastReport, на котором построен данный пример) предусмотрели и сделали для нас Preview (в даном случае frPreview) а так же возможность получить в репортере данные из Dataset, который находится на форме (того или иного движка, тоесть если Вы используете БДЕ или FibPlus, то должны включить соответствующий компонент) ? и вроде жизнь-малина. Но допустим у нас есть две таблицы. В первой есть типы клиентов, то есть Брат, друг, знакомый, и т.д. а во второй те же Васи Коли Пети (с признаком типа, то есть друг он или нет). Все это должно быть на одной форме, с превьювом,. но тогда на нем (превьюве) практически не будет ничего видно ?. Вот тут то и пригодится вариант, когда frPreview будет совсем в другой форме (также на форме будет вышеописаный ²кнопарь⌡, так же CheckBox, который будет говорить нам показывать ли превью или нет а так же по желанию стандартные кнопки управления превьювом), а вызывать мы его будем так как я показывал выше, то есть будет впечатление, что frpreview тут - на формочке :), но когда нужно ближе присмотреться к документу, то preview выскочит в отдельное окошко :). Для этого в событие OnAfterScroll нашей таблички, по которой будет строится документ . мы поставим следующее:
procedure TForm1.Table2AfterScroll(DataSet: TDataSet);
begin
if assigned(form2) Then //проверяем есть ли вообще форма
Begin
if form2.CheckBox1.checked then //Мы можем не всегда показывать превью,
//только тогда когда этого захочет пользер
begin
form2.frreport1.LoadFromFile('a1.frf');
form2.frreport1.PrepareReport;
form2.frreport1.ShowPreparedReport;
end
else
if form2.frreport1.Pages.count<>0 then
begin
form2.frreport1.Clear;
form2.frReport1.Preview.Clear;
end;
end;
Между табличками можно еще поставить несколько сплитеров, чтобы можно было все это дело передвигать и менять размерчики. Так же в событии формы 2 я поставил такие строчку:
frpreview1.PageWidth;
Это чтобы когда формочка меняет размер, чтобы менялся масштаб отображения документа.
|
|
|
Статьи данного автора в акции Borland:
|
Обсуждение |
17 октября 2003 - 10:32 yuraua тестирую |
тест! |
30 августа 2003 - 07:36 aeff конструктив |
Как подметил Rollback в комментариях к статье ╚Методика разработки программного обеспечения в среде Delphi для систем промышленной автоматизации╩, особенностью конкурса на itware есть то, что в статье позволено размещать только одну картинку и то в конце статьи, а я вижу 2 статьи, к которым это не относится. У нас, есть черные и белые люди? Предлагаю исключить из конкурса статьи, у которых больше одного рисунка. ИМХО это будет справедливо. |
28 июля 2003 - 07:07 drweb 2akzhan |
При всем уважении к Вам, позвольте сказать что Вы абсолютно не правы, поскольку с момента моего последнего поста я не мог этого сделать, потому что я 2 недели отдыхал в Карпатах и доступа в интернет у меня не было. |
24 июля 2003 - 00:25 akzhan И всё-таки она вертится |
А статья ниже уровня. Следовательно, голоса накручиваются. Плохой человек, редиска. |
24 июля 2003 - 00:23 akzhan К сведению |
Я пользуюсь похожим трюком, но более привычным и более универсальным. Используется VCL Docking ability. Плюсы: Правильное размещение формы на TPageControl. Алгоритм: 1. Создаём fmChild (hidden state). 2. fmChild.Align = alClient; 3. ctlChildArea.ManualDock(fmChild, nil, fmChild.Align); 4. fmChild.Show; Таких полезных трюков много... |
17 июля 2003 - 07:44 akot Держи голос... |
И для чего так наезжать на парня? Мне твоя статья нравится - держи голос. |
14 июля 2003 - 08:38 drweb интересно, почему мою статью еще не удалили? |
Может я и с админами сайта в сговоре? А может просто статья отвечает правилами участия в конкурсе?<br> 2buzz: http://itware.com.ua/news/2003/04/01/borland_contest.html ⌠В рамках конкурса можно самостоятельно загружать свои статьи в ITware (от коротких заметок до больших аналитических материалов). ■<br> 2sergeysh: FAQ√ ╚Frequently Asced Questions╩ √ часто задаваемые вопросы. Вы видели, чтобы вопросы на такую тему часто задавались? |
14 июля 2003 - 08:30 drweb еще о рейтингах... |
После каждой опубликованной статьи, мне приходило по несколько десятков сообщений, в которых говорилось о том, что идеи довольно оригинальные. В особенности много было откликов на последнюю статью, опубликованную на Delphiplus.org и на статью └FastReport: менеджер отчетов - 2■ (эта статья даже стала основанием для написания еще одной статьи, которая также опублико-ванная на http://delphiplus.org автор - Vladimir Khonin). Поэтому я не понимаю что вы все хотите сказать вашими бессодержательными агрессивными постами. |
14 июля 2003 - 08:17 drweb м-даа.... |
Не лазил я на сайт некоторое время, думал админы уже давно вытерли мою статью, а сегодня посмотрел и вижу, что статьей все таки еще читают и даже коменты оставляют :) значит чем-то еще она интересует людей. Ну что я вам могу сказать? Вы бы еще придумали что я вообще связан с всеми компаниями (может я и сайтам вашего прова рейтинги накручиваю и со всеми в сговоре?). Я понимаю что статья несколько нестандартная, но такой фразы √ это не только ненормально √ это полная бессмыслица. |
12 июля 2003 - 13:52 andrew75 |
Удалить эту статью должна сама администрация конкурса. Посмотрел я статьи на этом delphiplus. Опубликованная тут статья является копией статьи "Fast Report: Preview меняет родителей" (правда, с небольшими косметическими изменениями)! К тому же там на ней стоит пометка "Специально для Delphi Plus" и за нее уже вручен приз. С другой стороны, похоже, статьи drweb народу нравятся √ каждое его участие в конкурсе delphiplus приносит автору приз! И это, по моему мнению, несмотря на наличие более интересных статей. А может drweb и редакторы сайта Delphiplus в сговоре? |
9 июля 2003 - 16:09 buzz |
И правильно. И удали. Это не статья, это неполное описание банального трюка да еще и корявым языком. Именно поэтому результат голосования и внушает сомнения. Слабо представляю себе что эта поделка могла понравиться такому количеству народа. |
9 июля 2003 - 15:54 drweb злые вы.... |
прошу администратора сайта удалить статью из конкурса, потому как она не всем понравилась. |
9 июля 2003 - 15:49 drweb О жаргонах... |
Еще раз повторюсь: такой вариант восприятия больше нравится начинающим, и вообще Интернет это место где могут сосуществовать как профессионалы, так и начинающие. Я это писал для начинающих: бывалый программист и сам бы догадался к такому варианту, который описан в данной статье. И я ничем не хотел обидеть Delphiplus.org √ просто я сделал выводы из голосования (как это не удивительно): больше голосовали за такие статьи. Относительно ошибок √ я же сказал, что исправлюсь. |
9 июля 2003 - 15:22 madcolonel учитесь родного языку... |
Ну что я могу сказать... сразу видна эйфория... человек внезапно обнаружил новое свойство, научился его кое-как использовать... появилось непреодолимое желание так сказать поделиться опытом... похвально конечно... ежели бы не стиль изложения... огромное количество орфографических и синтаксических ошибок, жаргонные словечки... на лице :) явное неуважение к читателям сего опуса.... и стремление показать себя эдаким "кульхацкером от Борланда" :))) в общем, красноречивый образчик того "как не надо...". Ставлю -1. |
9 июля 2003 - 15:05 sergeysh о языке! |
Повторюсь, ╚статья╩ это текст, призванный нести какую-то полезную информацию, чаще всего информативно-обучающего характера. И я не думаю, что будет правильно ╚учить╩ ярко выраженными ошибками. Давайте, для быстроты усвоения таблицу умножения переделам, на ╚дважды два √ пять╩? Быстрее запомнят? Вряд ли. А вот то, что неправильно запомнят это гарантированно. И я не думаю, что автор специально коверкал язык и переиначивал термины. Это уже стиль изложения: ╚пимпочка-кувыколка╩. И даже и в юмористических рассказах не принято делать орфографические ошибки. P.S. На месте Delphiplus.org я бы обиделся - отличный информационный сайт, а не балаган. |
9 июля 2003 - 14:44 drweb drweb |
Просто я уже видел, что такой формат представления информации наиболее восприимчив для начинающих читателей. (на том же Delphiplus.org) Данные замечания возьму во внимание при написании следующей статьи. Спасибо. |
9 июля 2003 - 14:29 sergeysh За чистоту языка и правильность изложения |
Мое мнение, что написание "статьи" влечет за собой хотя бы какое-то соблюдение элементарных правил в изложении текста. А тут я увидел полный набор недостатков: художественные раскраски текста: ╚утютю╩, ╚Мы бац бац┘╩, ╚размерчики╩ и далее в таком духе. Второе: ╚кнопарь╩, ╚форм2╩ - это что? Вольный перевод терминов? Создается впечатление, что автор просто не знает, как правильно назвать описываемые классы и объекты. Ну и третье: орфография - ╚проэкт╩. :о( А статья мне не понравилась по двум причинам: - смысл методы мог бы поместиться в нескольких строках FAQ, а его расписали на целую статью. И пример с предварительным просмотром отчета √ дешевый прием для клиента, в процессе работы пользователь больше оценит информативность просмотра или гибкий инструмент выборки и поиска. Жаль, что нет возможности проголосовать ╚минус один голос╩. |
9 июля 2003 - 13:08 drweb поддерживаю ;) |
заканчиваем флейм ;) кто как хочет пусть так и думает, но я от своих слов не отказываюсь: накручивать мне нет смысла потому как это легко проверяется. |
9 июля 2003 - 12:47 macroflex Закончим |
1. Я не боюсь, я ж написал: мне просто интересно :) 2. Грязью никто никого не поливал, я высказал предположения и то, о чем меня предпреждали. Всего-навсего. Или действительно нет почвы для флейма? :) |
9 июля 2003 - 12:33 drweb ну и ну... |
интересно почему такая уверенность... Если это было замечено на DelphiPlus, почему приз все таки вручали??!! кстати на счет анонимных прокси... это ж можно элементарно проверить (думаю, как это делается обьяснять не надо) оправдываться тоже не буду потому как бред это... Я не понимаю, Вам что страшно? вы же на даный момент явный лидер, а вот так просто обливать грязью, не проверив - это явно не нормально. Впредь на похожие бредовые высказывания отвечать не буду. |
9 июля 2003 - 12:18 macroflex Delphiplus |
Все претензии к редактору сайта Delphiplus. А ссылку на основную страницу IMHO давать необязательно, поскольку голосование ничего не решает. Я этот тред затеял только из интереса, почему люди готовы крутить счетчики на чем попало? (Только не надо рассказывать еще раз про объявления и универ, сам знаешь почему). И я не верю, что когда ты проголосовал за меня, ты уже не потратил свой голос на себя :))) Что лишний раз доказывает мою правоту. Можешь не мучаться в написании ответа, я все равно остануть при своем мнении. :) Считаю тему исчерпанной. :) ЗЫ. Кстати Андрей Голубовский (delphiplus) предупредил меня заранее, что ты уже крутил счетчик на DelphiPlus, когда размещал свою статью в конкурс. Так что опыт у тебя имеется :) |
9 июля 2003 - 11:40 drweb кстати о линках.... |
2macroflex^ Довольно интересный вариант с ссылкой: линк то на delphiplus.org ведет прямо на Вашу статью, а не на список статей голосования... Я больше чем уверен, что большинство пользователей, даже не увидели того списка... |
9 июля 2003 - 10:45 drweb |
>>30 голосов <=> сморим ссылку с delphiplus.org :) в моем случае похожий вариант: достаточно было в универе повесить плакатик о статьях.... ;) вот так вот |
9 июля 2003 - 10:36 macroflex |
30 голосов <=> сморим ссылку с delphiplus.org :) Как только новость стала не актуальной, сразу спал наплыв голосов. Все закономерно. ЗЫ. Правильно, крутить надо неспеша, чтоб никто не заподозрил подвоха :) Еще раз успехов! |
9 июля 2003 - 10:21 drweb Меня все таки интересует... |
как добится того, чтобы статья выглядела так, как её компонирую я (размещение изображений, ссылки, разметка)? К кому обратится с таким вопросом? админы сайта молчат... |
9 июля 2003 - 10:18 drweb в свое оправдание говорить ничего не хочу... |
О том, что выбор победителя будет основан на содержании написаного и поэтому на днях выставлю еще одну статью а на счет анонимных прокси - я не могу их использовать поскольку в интернете я сижу только на работе, и у меня нет реального IP адреса, чтобы лазить через анонимные прокси. Кстати о голосовании... за день больше 30 голосов это не мой результат... |
9 июля 2003 - 09:27 macroflex Дерзайте, юноша со взором горячим! :) |
Я вижу, что автор знаком с понятием "анонимные прокси" :) Благо, выбор победителя будет основан на содержании написанного, а не по результатам голосвания. :) Удачи! |
7 июля 2003 - 13:57 drweb Запитання адмЁнЁстраторам сайту |
Як добитися того, щоб в статтЁ було бЁльше одного малюнка та щоб зберЁгалася розмЁтка сторЁнки? (просто планую на днях ще одну статтю вислати) |
|
|
|