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

Вниз

Кто с чего начинает писать программу?   Найти похожие ветки 

 
Vasya.ru   (2004-07-02 23:06) [0]

Я вот первым делом леплю кнопку "Закрыть" и пишу её обработчик. А вы с чего? И ещё: Кто как называет кнопку, закрывающую приложение: "Закрыть", "Выйти" - какие еще варианты есть?


 
wnew ©   (2004-07-02 23:08) [1]

Beenden :)


 
Anatoly Podgoretsky ©   (2004-07-02 23:13) [2]

А я с сохранения проекта, кнопка может подождать.


 
ламер ©   (2004-07-02 23:13) [3]

обычно - "Uždaryti" или "Grįžti".


 
Vasya.ru   (2004-07-02 23:15) [4]

Beenden :)
Не понял...


 
Игорь Шевченко ©   (2004-07-02 23:16) [5]

Я первым делом сохраняю проект (создаю для него папку, может быть, не одну), затем меняю название формы на fMain.


 
ламер ©   (2004-07-02 23:16) [6]

а проект я всегда начинаю с создания директории для него и сохранения.


 
GuAV ©   (2004-07-02 23:29) [7]


> а проект я всегда начинаю с создания директории для него
> и сохранения.

Аналогично. Хотя можно было бы создавать в savedialoge. имхо я тоже ламер.


 
DrPass ©   (2004-07-02 23:30) [8]

А я сначала думаю, что я буду писать


 
Огромное Кулясищще ©   (2004-07-02 23:32) [9]

Exit
Ненавижу названия кнопок на русском.


 
Игорь Шевченко ©   (2004-07-02 23:35) [10]


> Ненавижу названия кнопок на русском.


Я переболел :)


 
Rouse_ ©   (2004-07-02 23:45) [11]

А я первоначально занимаюсь проектировкой, и только потом появляются на свет пресловутые begin...end


 
Baron ©   (2004-07-02 23:51) [12]

Если придет идея сначало пишу потом кидаю обычно куда попало. Часто просто в Projects. Когда пишу что нибудь что нужно писать до конца, то выковыриваю из своих кодов, нужное и линкую.
GuAV ©  (02.07.04 23:29) [7]
Наверное я тоже ламер.


 
Огромное Кулясищще ©   (2004-07-03 00:03) [13]

> Я переболел :)

Но как вы это терпите? "Копировать", "Сохранить как"? "Закрыть" вообще ужасно выглядит. "Выход" вроде не выход, а "Выйти" - это вообще приказ (а ещё есть прикол "Завершить сеанс", уж лучше "BCE, B DOS", как в старом Аладдине). ИМХО если делать русские надписи, то только ввиде link"ов.


 
Шоломицкий   (2004-07-03 00:09) [14]

Я название формы, а сохранять постоянно забываю, из-за чего бывают проблеммы(


 
Baron ©   (2004-07-03 00:14) [15]

Шоломицкий  (03.07.04 00:09) [14]
Да да, а я весь винт зафлудил.


 
Piter ©   (2004-07-03 00:15) [16]

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


 
Шоломицкий   (2004-07-03 00:20) [17]

>  Я всегда по ходу делаю её вид, изначально с трудом представляю, как прога будет выглядеть(
И вобще я не могу ничего сделать красиво(( Хоть дизайнера нанимай.!


 
Игорь Шевченко ©   (2004-07-03 00:20) [18]

Огромное Кулясищще ©   (03.07.04 00:03)


> Но как вы это терпите?


Родной язык, знаете ли :)


 
GuAV ©   (2004-07-03 00:20) [19]


> Пишу все это на листочке...

Зачем же на листочке. Создай модуль unit Chernovik;)


 
KilkennyCat ©   (2004-07-03 00:26) [20]

а я сразу же кликаю дважды на форме, ставлю два слэша в onCreate (чтоб умный компилятор не грохнул) и считаю проект на 90% выполненным, если сразу все скомпилится и запустится. А поскольку с таким кодом оно обязательно все будет Ок, то почти все проекты у меня на 90% выполнены. После этого я его сохраняю, или не сохраняю, полагаясь на память, и иду чем-нить развлекаться, так как осталось всего 10% проекта и почти 100% времени на него.


 
Style ©   (2004-07-03 00:34) [21]


> Игорь Шевченко ©   (02.07.04 23:16) [5]
> Я первым делом сохраняю проект (создаю для него папку, может
> быть, не одну), затем меняю название формы на fMain.


Тоже самое, только главную форму я называю  Frm_main.
Юнит главной формы я называю f_main.pas;
И все последующие формы именую с приставкой Frm_, И вообще все объекты именую с приставкой которая показывает мне объектом какого класса они является.  Например для TQuery - qry_report; TButton - (btn_ok, btn_cancel) и т.д.

Юниты которые не содержат форм (константы, нити, утилиты) я именую с приставкой u_ (u_const.pas);

Обычно сразу добавляю в проект модуль с заготовками (утилитами) u_utils.pas и модуль с константами.

После создания очередной формы( не главной ), первым делом удаляю глобальную переменную указатель на саму форму (var Frm_Receptures: TFrm_Receptures;)

А не модальные формы вызываю вот так:

 ShowForm(self, TFrm_Receptures);


Ну естественно эта процедура уже есть в заранее u_utils или добавляю ее отдельно в f_main.pas


procedure ShowForm(Owner: TComponent; InstanceClass: TComponentClass);
var
 Instance: TComponent;

 function CreateForm: TForm;
  var Reference: TForm;
 begin
   Instance := TComponent(InstanceClass.NewInstance);
   TComponent(Reference) := Instance;
   try
     Instance.Create(Owner);
   except
     TForm(Reference) := nil;
     raise;
   end;
   result := Reference;
 end;

 function FormByClass(FormClass: TClass): TForm;
 var
  i: integer;
 begin
    result := nil;
    for  i := 0 to Screen.FormCount-1 do
    begin
      if Screen.Forms[i].ClassName = FormClass.ClassName then
      begin
        result := Screen.Forms[i];
        break;
      end;
    end;
 end;

begin

 if(FormByClass(InstanceClass) = nil) then
 begin
   with CreateForm do Show;
 end else
 begin
   with FormByClass(InstanceClass) do
   begin
     WindowState := wsNormal;
     Show;
   end;
 end;

end;


 
Lenor   (2004-07-03 00:49) [22]

>> Ненавижу названия кнопок на русском.
>
>
>Я переболел :)

А я еще нет :)


 
Style ©   (2004-07-03 00:50) [23]


> А я еще нет :)


LingVo - отличное лекарство ;)


 
Тимур   (2004-07-03 00:51) [24]

А я первым делом иду на delphimaster.ru и спрашиваю, спрашиваю, спрашиваю.


 
Style ©   (2004-07-03 01:05) [25]


> А я первым делом иду на delphimaster.ru и спрашиваю, спрашиваю,
> спрашиваю.


Вот это, как раз не есть хорошо!
Нужно действовать по следующей схеме:

1. Подумать
2. Help
3. Как следует подумать
4. FAQ
5. Еще сильнее подумать
6. Ya.ru, Aport, Rambler, AltaVista, Google
7. Направить все силы для того чтобы подумать
8. Delphimaster и спрашивай, спрашивай, спрашивай :)


 
Алхимик ©   (2004-07-03 01:16) [26]

Сначала иду покурить, потом наливаю кофея, потом интересуюсь что же собственно пишем.
Затем
1. Сетую начальству на хреновость компьютера.
2. Выделяю персональную папочку проекта.
3. Создаю пунктик в TeamSource.
4. Беру ручку и бумагу, чтобы расписать основные тезисы, и ничего не написав плюхаюсь за Delphi. :)
p.s. Главная форма всегда зовётся frmMain.


 
GuAV ©   (2004-07-03 01:16) [27]

KilkennyCat ©   (03.07.04 00:26) [20]
А если окажется, что OnCreate главной формы не нужно? (Имхо, может так оказаться). Тогда переделывать 90% ?


 
Игорь Шевченко ©   (2004-07-03 01:18) [28]

Style ©   (03.07.04 00:34) [21]


> Юнит главной формы я называю f_main.pas;


Я называю main.pas

Подчеркиваний в названиях не использую, так как воспринимаю их, как шум (IMHO, разумеется). Вместо них я использую "нотацию верблюда" (btnClose, btnStartReport, и т.д.), либо нотацию Паскаль в именах (первая буква заглавная).


> Юниты которые не содержат форм (константы, нити, утилиты)
> я именую с приставкой u_ (u_const.pas);


Соответственно CommonConsts (общие для всего) или ProjectConsts, SomeDomainPartConsts, и т.д.


> После создания очередной формы( не главной ), первым делом
> удаляю глобальную переменную указатель на саму форму (var
> Frm_Receptures: TFrm_Receptures;)


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

Модальные формы стараюсь обычно начинать с префикса dlg (TdlgAbout, TdlgEditSettings) немодальные с префикса f (fInspector, fDesigner).

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

Примерно это выглядит так: (вместо My префикс нужной системы)
 
 TMyMDIFormClass = class of TfMyMDIForm;

 TMyMDIFormController = class
 private
   FFormName: string;
   FMyMDIFormClass: TMyMDIFormClass;
   property FormName: string read FFormName;
 public
   constructor Create (AFormClass: TMyMDIFormClass;
     const AFormName: string);
   procedure ShowForm (AOwner: TComponent); virtual;
   property MyMDIFormClass: TMyMDIFormClass
     read FMyMDIFormClass;
 end;

 TMyPrefiteredMDIFormController = class(TMyMDIFormController)
 private
   .....
 public
   constructor Create (AFormClass: TMyMDIFormClass;
     const AFormName: string; ....);
   procedure ShowForm (AOwner: TComponent); override;
 end;

 TMyChildMDIFormController = class(TMyMDIFormController)
 public
   procedure ShowForm (AOwner: TComponent); override;
 end;

 TMyMDIFormControllerList = class(THSObjectList)
 private
   function GetItems(I: Integer): TMyMDIFormController;
   property Items[I: Integer]: TMyMDIFormController read GetItems;
 public
   function Find (const AFormName: string): TMyMDIFormController;
 end;

...........
implemenation
..........
type
 TMyMDINullFormController = class(TMyMDIFormController)
 public
   constructor Create;
   procedure ShowForm (AOwner: TComponent); override;
 end;


Последний нужно для того, чтобы метод Find списка контроллеров вернул некий фиктивный объект, обладающей сходным интерфейсом, чтобы исключить проверки на nil.

В секции инициализации юнита с наследником выполняется код:

initialization
 FormControllerList.Add(TMyMDIFormController.Create (
   TfGlobalIndicators, "GlobalIndicators"));


Для чего эти хитрости - в любом месте, где мне надо вызвать такую форму, я пишу один и тот же код (формы вызываются по Action.Execute)

procedure TfrmMain.FormActionExecute(Sender: TObject);
var
 AClassName: string;
begin
 AClassName := Copy(TComponent(Sender).Name, 4,
   Length(TComponent(Sender).Name));
 FormControllerList.Find(AClassName).ShowForm (Application);
end;


Причем, один раз для всех однотипных TAction. Имя каждого TAction выглядит как actИмяКонтроллераОбеспечивающегоЗапускФормы (лучшего решения пока не нашел).

Это избавляет от необзолимости добавлять в uses те югиты, которые содержат вызываемые формы.


 
Sanek_metaller ©   (2004-07-03 01:33) [29]

Открываю Delphi->File->New->application


 
Style ©   (2004-07-03 01:35) [30]


> Игорь Шевченко ©   (03.07.04 01:18) [28]



> Подчеркиваний в названиях не использую, так как воспринимаю
> их, как шум (IMHO, разумеется).


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


> С созданием форм несколько иначе - почти все немодальные
> формы являются наследником некой абстрактной формы, чаще
> всего MDI (корпоративный стиль)


А я почему то MDI формами особо не увлекался. Может потому что на работе их ни кто не использовал в проектах. Корпоративный стиль :))


 
Style ©   (2004-07-03 01:36) [31]


> Открываю Delphi->File->New->application


Краткость - сестра таланта :)


 
KilkennyCat ©   (2004-07-03 01:39) [32]


> GuAV ©   (03.07.04 01:16) [27]


у меня такого еще не было :)
Но, если допустить такое, то просто к номеру версии прибавится единичка, время разработки и стоимость проекта увеличаться в два раза :)


 
GuAV ©   (2004-07-03 01:58) [33]

Кстати, авторы KOL решили сабжевый вопрос, описав ритуал создания приложения в документации :)


 
cyborg ©   (2004-07-03 09:19) [34]

Как обычно пишу:

Program ...
begin
end.

А затем сижу, думаю, чего начать писать :).


 
Рамиль ©   (2004-07-03 10:04) [35]


> [34] cyborg ©   (03.07.04 09:19)

Пишешь только на API?:)


> Я вот первым делом леплю кнопку "Закрыть" и пишу её обработчик.
> А вы с чего? И ещё: Кто как называет кнопку, закрывающую
> приложение: "Закрыть", "Выйти" - какие еще варианты есть?

Никогда не делал кнопки "Закрыть". Всегда стандартный пункт меню -
Файл -> Выход. Даже если прога с файлами не работает :)

Первым делом переименовываю главную форму в fmMain и юнит соотв. в MainForm.


 
Vasya.ru   (2004-07-03 10:14) [36]

Никогда не делал кнопки "Закрыть". Всегда стандартный пункт меню - Файл -> Выход
Тоже всегда делаю пункт меню Файл -> Выход и всегда терзаюсь вопросом: "Почему первый пункт меню всегда везде и у всех называется "Файл"?"?


 
cyborg ©   (2004-07-03 11:16) [37]


> [35] Рамиль ©   (03.07.04 10:04)

Почему только на API? Я вообще API фукции мало использую, только окно создать и сообщение вывести, остальное обычный Паскаль.


 
Knight ©   (2004-07-03 12:13) [38]

1) Начинаю с идеи и желания её реализовать.
2) Затем идёт этап осмысления, как это должно работать.
3) Выбор типов данных (стандартных или новых).
4) Если есть базы, то примерно намечается перечень таблиц и необходимых полей.
5) Первые наброски общего алгоритма или блок-схемы на бумаге.
6) Определяюсь с необходимыми модулями, формами и диалогами.
7) Примерный набор функций в которые выносятся либо наиболее часто используемые фрагменты кода, либо просто для удобочитаемости.
8) Первый запуск компилятора...

(кол-во пунктом может варьироваться в зависимости от проекта)

Основные сокращения:
MainForm (MainUnit) - главная форма;
SettingsForm (SettingsUnit) - форма настроек;
AboutForm (AboutUnit) - о программе;
... и т.п.

DM (DMUnit) - DataModule;

GlobalUnit - константы, необходимые переменные, процедуры, функции (разные, но в основном простые, типа, преобразования типов, загрузка и запись конфигурации в ini и т.п.)

Константы - ПРОПИСНЫМИ.
<название программы>Config - глобальная переменная типи record с настройками.

Panel - (TopPanel, MainPanel и т.п.)
Button = Btn - (OpenBtn, SaveBtn и т.п.)
Image = Img.

Ну и т.д... :)


 
Рамиль ©   (2004-07-03 12:31) [39]


> [37] cyborg ©   (03.07.04 11:16)

Я имел ввиду, что это сама среда пишет.


 
YurikGL ©   (2004-07-03 12:49) [40]


> > Я вот первым делом леплю кнопку "Закрыть" и пишу её обработчик.
>
> > А вы с чего? И ещё: Кто как называет кнопку, закрывающую
>
> > приложение: "Закрыть", "Выйти" - какие еще варианты есть?


Кстати, с точки зрения  эргономики (читай тупого пользователя) правильным является написание глагола на кнопе. Т.е. "зарыть" или "Выйти" а не "Выход".

Точно так же как и правильным является название кнопки "Сформировать отчет" а не просто "Отчет" т.к. по названию "Отчет" можно лишь догадываться отразит он тебе его на экране или на печать пошлет.

И еще с точки зрения пользователя все же лучше писать русские слова...


 
Vlad Oshin ©   (2004-07-03 12:57) [41]

с кнопки button1, на нажатие которой - основная идея
все равно же переписывать и не раз


 
iZEN ©   (2004-07-03 13:05) [42]

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

Зачем меню "Файл" у формы, которая не работает с файлами?

Всем читать "Интерфейс" Раскина.


 
Delphin ©   (2004-07-03 14:21) [43]

Всё начинается с идеии (или от задания), потом с объявлением переменных. Ну а дальше как получится :))


 
Гаврила ©   (2004-07-03 14:36) [44]

У меня названия форм начинаются с префикса fm.
главная форма fmMain<и далее название проекта>, чтобы не было нескольких окон одного класса в системе.
А названия модулей с формами начинаются на название формы без префикса, а заканчиваются на form.

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


 
iZEN ©   (2004-07-03 15:12) [45]

Класс формы проекта - <Имя>Form (например, AbstractReportForm)
Экземпляр кнопки - <имя>Button (например, closeButton)
и т.д.

Иногда приватные поля класса обзываю с подчёркиванием спереди: _<имяПоля>.

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


 
Aristarh ©   (2004-07-03 16:04) [46]

Подчеркивания в Делфи не использую, считаю неудобными для набора.
Хотя сейчас в VC++ постепенно приучают к ним, типа m_Name - мембер класса.

Сокращения следующие:
fmMain main.pas
btnName - ну вы в курсе, куда же без нее.
lbName - ListBox
cbName - ComboBox
chbName - CheckBox
clbName - CheckListBox
lblName - Label
edName - Edit
rbName - RadioButton
pnlName - Panel
quName - Query
....... и т.д. и т.п.......


 
Семен Сорокин ©   (2004-07-03 16:34) [47]

С подчеркивания начинаю времменые переменные (обычно локальные), сокращения - один в один как у Aristarh © :), очень удобно видеть в том-же инспекторе объектов отсортированными по типам.
По поводу кнопки "Закрыть", то если и добавляется - далеко не в начале проекторования.


 
Огромное Кулясищще ©   (2004-07-03 17:19) [48]

>Тоже самое, только главную форму я называю  Frm_main.
Юнит главной формы я называю f_main.pas;


Я называю главную форму mainForm и соответсвенно mainUnit.pas, а дальше formAbout и unitAbout.pas для примера соответсвенно.



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

Форум: "Потрепаться";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.6 MB
Время: 0.052 c
8-1083874883
Sanek_metaller
2004-05-07 00:21
2004.07.25
Position


1-1089534069
killer
2004-07-11 12:21
2004.07.25
Вызов одной формы из другой, которые находятся в одной DLL


14-1088668148
Красная Майка
2004-07-01 11:49
2004.07.25
Неофициальное MMP завтра для всех желающих!!!


1-1089701507
sergeii
2004-07-13 10:51
2004.07.25
Подскажите как в строке чисел наитйти букву


1-1089695944
bobj
2004-07-13 09:19
2004.07.25
Обработка TreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский