Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заполнение формы до её отображения [D7, 2003]


Страницы:   1 2 3 4

jacksotnik ©   (2011-11-23 16:28:00) 

Всем добрый день.
Вызываю форму так
card.showmodal;
На форме есть эдиты в которые мне надо записать данные до того как форма покажется(чтоб форма открывалась уже заполненная и её можно было редактировать). Знаю решение через глобальные переменные, но как-то неудобно может есть способ попроще


Медвежонок Пятачок   (2011-11-23 18:58:00) [41]

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

Ну а у меня вызывающий не только этогознать не должен, он еще и имя класса формыможет не знать.

Он вызывает ординал функцию, и понятия ни о чем другом кроме ее и структуры не имеет. Ибо ему это не надо.
Ему надо всего лишь отредактировать пару логин/пароль.


Ega23   (2011-11-23 18:56:00) [42]


> пример аналогичный [13] напиши и увидишь зачем


Легко.


Ega23   (2011-11-23 18:56:00) [43]


> кроме того, нет примера аналогичного примеру из [13].


У тебя версия delphi какая?
Я просто домой сейчас ухожу, из дома пример подробный накидаю.


Медвежонок Пятачок   (2011-11-23 18:55:00) [44]

пример аналогичный [13] напиши и увидишь зачем


Ega23   (2011-11-23 18:54:00) [45]


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


ЗАЧЕМ?????

На код посмотри внимательно.


Медвежонок Пятачок   (2011-11-23 18:53:00) [46]

кроме того, нет примера аналогичного примеру из [13].
а нет его потому что код там будет лошадиный.


Медвежонок Пятачок   (2011-11-23 18:51:00) [47]

Ну и нафига оно надо? Писать class-метод, чтобы всё это вызвать...

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


Медвежонок Пятачок   (2011-11-23 18:50:00) [48]

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


Ega23   (2011-11-23 18:48:00) [49]


> Result := ShowModal = mrOk;
> if Result then
> begin
>  pRec^.....:= Edit.....
>  .....
> end;


Ну и нафига оно надо? Писать class-метод, чтобы всё это вызвать...
Не дело это. ИМХО.


Ega23   (2011-11-23 18:43:00) [50]

И для вызывающего форму знать не надо, что есть какие-то эдиты, фигедиты и прочие комбо-боксы.
Есть контейнер с данными (класс, рекорд - не суть).
Вот мы их туда и передали. И получили обратно. А как оно "унутре" устроено - не наша забота.


Ega23   (2011-11-23 18:42:00) [51]


unit uMain;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TLoginAndPwd = record
   Login: string;
 Pwd: string;
 end;

 TLoginAndPwdForm = class(TForm)
   eLogin: TEdit;
   ePwd: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   btnEditPwd: TButton;
   btnOK: TButton;  // <- На кнопку вешаем ModalResult = mrOK
   procedure btnEditPwdClick(Sender: TObject);
 private
   function GetLoginAndPwd: TLoginAndPwd;
   procedure SetLoginAndPwd(const Value: TLoginAndPwd);
 public
   property LoginAndPwd: TLoginAndPwd read GetLoginAndPwd write SetLoginAndPwd;
 end;

var
 LoginAndPwdForm: TLoginAndPwdForm;

implementation

{$R *.dfm}

{ TLoginAndPwdForm }

procedure TLoginAndPwdForm.btnEditPwdClick(Sender: TObject);
var
 frm: TLoginAndPwdForm;
begin
 frm := TLoginAndPwdForm.Create(Application);
 try
   frm.LoginAndPwd := LoginAndPwd;
   frm.ShowModal;
   if frm.ModalResult = mrOk then
     LoginAndPwd := frm.LoginAndPwd;
 finally
   frm.Free;
 end;
end;

function TLoginAndPwdForm.GetLoginAndPwd: TLoginAndPwd;
begin
 Result.Login := eLogin.Text;
 Result.Pwd := ePwd.Text;
end;

procedure TLoginAndPwdForm.SetLoginAndPwd(const Value: TLoginAndPwd);
begin
 eLogin.Text := Value.Login;
 ePwd.Text := Value.Pwd;
end;

end.


Медвежонок Пятачок   (2011-11-23 18:37:00) [52]

Какой такой ончейндж?

...
Result := ShowModal = mrOk;
if Result then
begin
 pRec^.....:= Edit.....
 .....
end;


Ega23   (2011-11-23 18:31:00) [53]


> лаконично и универсально.
> сравни с вариантом когда будут свойства.


Ага, вот только надо на каждый эдит прописывать OnChange
А зачем?


Медвежонок Пятачок   (2011-11-23 17:56:00) [54]

в данном случае они не нужны.
они нужны там, где надо инкапсулировать нечто не давая доступа к приватным делам.
например чтобы не надо было писать form1.edit1.text

так у меня и не пишется. вся реализация формы скрыта от программиста-пользователя формы.


Anatoly Podgoretsky   (2011-11-23 17:48:00) [55]

> Медвежонок Пятачок  (23.11.2011 17:42:13)  [13]

Ты не понимаешь свойств, как раз они более универсальны


Медвежонок Пятачок   (2011-11-23 17:42:00) [56]

наглядно:

пусть форма редактирует пару логин/пароль

PUserRec = ^TUserRec;
TUserRec = record
ur_login,
ur_password : string;
end;

тогда:

//редактируем в форме
if EditLoginData(pRec) then
begin
  //отправляем куда-то
  ChangeLoginDataSomeWhere(pRec);
  //Пишем о чем-то куда-то
  WriteToLogAboutSomething(pRec);
  // еще чего-то там
  DoSomethingElse(pRec);
end;  


лаконично и универсально.
сравни с вариантом когда будут свойства.

Зачем кстати они если код из [3] живет в модуле самой формы?


Ega23   (2011-11-23 17:40:00) [57]


> а еще например если результат редактирования в форме надо
> пропихнуть куда-то дальше.


Тогда не только с сеттером, но ещё и с геттером, делов-то...


Ega23   (2011-11-23 17:39:00) [58]


> а еще например если результат редактирования в форме надо
> пропихнуть куда-то дальше.


Тогда не только с сеттером, но ещё и с геттером, делов-то...


Медвежонок Пятачок   (2011-11-23 17:20:00) [59]

а еще например если результат редактирования в форме надо пропихнуть куда-то дальше.


Медвежонок Пятачок   (2011-11-23 17:18:00) [60]

свойство очень менее удобно.
например если местов вызова формы больше одного.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо