Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2011, 15:27   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Date из одного окна в другое окно

Здравствуйте!
Вопрос как правильно передать Дату из одного окна в другое окно?
Пробую при помощи function так:
Код:
type
  TfBaseForm = class(TForm)
   edDate: TJvDateEdit;
   procedure FormCreate(Sender: TObject);
public
  function GetDateShift:TDate; // (а)

procedure TfBaseForm.FormCreate(Sender: TObject);
begin
 edDate.Date:=Date; // прекрасно работает
end;

// юзер изменяет дату итд

function GetDateShift:TDate;
begin
  Result:=edDate.Date; // (б)
end;
Постоянно ругается:
а) на строку объявления функции: [DCC Error] uBaseForm.pas(45): E2065 Unsatisfied forward or external declaration: 'TfBaseForm.GetDateShift'
б) всё время подчёркивает второе слово Date говорит неизвестная щняга O_o , попробовал даже: StrToDateTime(TimeToStr(edDate.Date )), edDate.Value.Date, edDate.FieldDate, итд. - всё не нравится!

В шоке, не могу понять что за ерундистика...

Сам метод передачи даты правильный? Или есть правильнее?
delphicoding вне форума Ответить с цитированием
Старый 27.07.2011, 15:32   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
function TfBaseForm.GetDateShift:TDate;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.07.2011, 15:41   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Блин. Запахался. Спасибо.

PS Кстати об удобстве и логичности Delphi - НИ РАЗУ не видел, чтобы процедура или функция писалась с ДРУГИМ названием формы... такое вообще бывает?! а то сомнения берут нахрена это название каждый раз писать?!
delphicoding вне форума Ответить с цитированием
Старый 27.07.2011, 15:51   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Запахался

а зачем пахать, нажимаешь Ctrl+Shift+C на объявлении метода, и IDE сама допишет его пустую реализацию.

> нахрена это название каждый раз писать?

классов в модуле может быть сколько угодно, имена методов могут у них совпадать. Форма — это такой же класс, как и любой другой. Ломать синтаксис только из-за форм, имхо, не логично. Тем более, если в будущем IDE будет позволять объявлять несколько форм в одном модуле, надо будет ломать всё обратно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.07.2011, 15:56   #5
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
а зачем пахать, нажимаешь Ctrl+Shift+C на объявлении метода, и IDE сама допишет его пустую реализацию.
А наоборот есть сочетание? Когда вручную пишешь код, нажимаешь комбинацию - он сам объявляется?
Цитата:
классов в модуле может быть сколько угодно, имена методов могут у них совпадать. Форма — это такой же класс, как и любой другой. Ломать синтаксис только из-за форм, имхо, не логично. Тем более, если в будущем IDE будет позволять объявлять несколько форм в одном модуле, надо будет ломать всё обратно.
Ясно, но когда в юните только одна форма каждый раз это писать конечно излишество. Стоило бы доделать этот момент разработчикам.
delphicoding вне форума Ответить с цитированием
Старый 27.07.2011, 15:57   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а то сомнения берут нахрена это название каждый раз писать?!
чтоб указать компилятору что это метод класса, а не просто функция.
Цитата:
Стоило бы доделать этот момент разработчикам.
а может не надо валить свою ошибку на разработчиков?

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

есть четкие правила, почему вы их не хотите выполнять?(кстати так практически везде, когда реализация отдельно от объявления)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 27.07.2011 в 16:01.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.07.2011, 16:07   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> А наоборот есть сочетание?

есть. Тоже Ctrl+Shift+C, как ни странно

> Стоило бы доделать этот момент разработчикам

имхо, максимум, что тут можно сделать, это добавить нечто вроде неймспейса:

Код:
with namespace TfBaseForm do begin

  function GetDateShift:TDate;
  begin
  end;

  function GetTimeShift:TTime;
  begin
  end;

end;
прикольно, но, имхо, нафиг не нужно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.07.2011, 17:58   #8
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
а может не надо валить свою ошибку на разработчиков?
Ответ очевиден - "ошибка" (скорее непривычка) возникло из-за неадекватных на мой взгляд правил синтаксиса.
Это всё равно что общаясь с человеком в каждом предложении обращаться по ФИО - оба охранеют от такого разговора...
Цитата:
я вот возьму, и в этом модуле объявлю еще один класс с таким же методом, и что тогда делать будем?(а еще рядовую функцию тоже объявлю)
А вдруг метеорит упадёт на комп? Ну почему Delphi не титановый?! А вдруг, а вдруг...
Вопрос намного проще - если всего один основной класс - нафиг его писать каждый раз?!
Да и даже если классов много, то имеет смысл писать полный путь исключительно при совпадении названий, иначе тоже...

нафиг не нужно.

Последний раз редактировалось delphicoding; 27.07.2011 в 18:07.
delphicoding вне форума Ответить с цитированием
Старый 27.07.2011, 19:53   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вопрос намного проще - если всего один основной класс - нафиг его писать каждый раз?!
Да и даже если классов много, то имеет смысл писать полный путь исключительно при совпадении названий, иначе тоже...
синтаксис должен быть однозначен всегда.
кстати, вы так же забыли учесть, внутренние функции модуля, то есть те которые не экспортируются(не доступны из других модулей), они имеют тот синтаксис(то есть их реализацию можно писать сразу на месте) что вы и написали, и по сути не нуждаются в объявлении.
вот поэтому компилятор вас и послал, потому что он видел:
1)неэкспортируюмую функцию модуля GetDateShift.
2)нереализованный метод TfBaseForm.GetDateShift.

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

PS: насчет ФИО пример не удачен, в официальном разговоре так и происходит.
а код, скорее официальный разговор.
PPS:
Цитата:
Ответ очевиден - "ошибка" (скорее непривычка) возникло из-за неадекватных на мой взгляд правил синтаксиса.
или от не знания вполне конкретного правила?
PPPS:а вообще весело в чужой монастырь со своими правилами лезть?синтаксис однозначен и правила известны, а вы их хотите изменить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 27.07.2011 в 19:56.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена одного слова на другое в массиве строк С++ Тома1993 Помощь студентам 0 17.03.2011 21:52
Перевод с одного значения в другое в С++ 2008 atlon Общие вопросы C/C++ 11 11.01.2009 00:34
Кнопки-ссылки на другое окно Slava13 Общие вопросы Delphi 10 12.11.2008 08:52
Перетаскивание значения одного поля в другое inret Общие вопросы Delphi 3 09.05.2008 15:26
[Delphi] Замена одного слова на другое... ZhooZhik Помощь студентам 5 09.01.2008 23:31