Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

EOutOfResources   Найти похожие ветки 

 
kombat ©   (2004-05-31 23:14) [40]

а в чем детский сад?


 
Piter ©   (2004-05-31 23:19) [41]

Детский сад говорите...

Gero & Nikkie, а что, есть надежда, что приведенный Nikkie пример рабочий? :)))


 
Piter ©   (2004-05-31 23:20) [42]

Давайте продолжим... покажите мне код создания формы класса TForm1


 
nikkie ©   (2004-05-31 23:22) [43]

>а в чем детский сад?
вот в этом:

Piter ©   (24.05.04 23:52)
А конструктор, естественно, от TCustomForm. Как у формы можно конструктор перекрыть...

nikkie ©   (25.05.04 00:34)
>Как у формы можно конструктор перекрыть...
элементарно. также как и у любого другого класса.

Piter ©   (31.05.04 18:30)
nikkie (25.05.04 00:34) [12]
>Как у формы можно конструктор перекрыть...
элементарно. также как и у любого другого класса
Nikkie, ты так и не привел примера!


за неделю можно было и попробовать самому...


 
Gero ©   (2004-05-31 23:22) [44]


> Piter ©   (31.05.04 23:19)

А есть какие-то подозрения в его работоспособности?


 
Gero ©   (2004-05-31 23:23) [45]


> Давайте продолжим... покажите мне код создания формы класса
> TForm1

Вот он:

> constructor TForm1.Create(AOwner: TComponent);
> begin
>  ShowMessage("aaa");
>  inherited;
> end;


 
Piter ©   (2004-05-31 23:25) [46]

да нет, тут некоторая непонятка получилась.

Вы добавляете методы к уже созданной форме, а я говорю про динамическое созданием формы


 
Gero ©   (2004-05-31 23:26) [47]


> Piter ©   (31.05.04 23:25)

Что значит <к уже созданной форме/i>?
По-моему, книжки тебе надо почитать...


 
nikkie ©   (2004-05-31 23:26) [48]

>покажите мне код создания формы класса TForm1
program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


или тебе сюда еще Forms.pas запостить?

ЗЫ я так чувствую мы еще постов 30 эту животрепещущую тему мурыжить будем :(


 
Piter ©   (2004-05-31 23:50) [49]

Gero (31.05.04 23:26) [47]
Что значит <к уже созданной форме/i>?


То и значит. Что форму не ты, а дельфи создает... Как правильно заметил Nikkie вызовом Application.CreateForm(TForm1, Form1);

nikkie (31.05.04 23:26) [48]
я так чувствую мы еще постов 30 эту животрепещущую тему мурыжить будем


ладно, не будем. Просто я не совсем согласен, что перекрывать метод формы можно также, как у других компонент.
Другие компоненты можно создать так сказать с нуля, а методы формы можно перекрывать только у создаваемой Дельфи с помощью CreateForm, потому как форма сохраняется в виде ресурса и при создании этот ресурс требуется.
Например, такой код не прокатит:

program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, Forms, classes;

type
 TMyForm = class(TForm)
   constructor Create(AOwner: TComponent); override;
 end;

var
 MyForm: TMyForm;

{ MyForm }

constructor TMyForm.Create(AOwner: TComponent);
begin
 inherited;

end;

begin
 MyForm:= TMyForm.Create(nil);
 try
   MyForm.ShowModal ;
 finally
   MyForm.Free;
 end;
end.


Хотя с обычными компонентами все бы прошло нормально...

Ладно, вы меня теперь, наверное, за дебила будете держать, просто в последнее время я туго формулирую свои мысли :)


 
Gero ©   (2004-05-31 23:52) [50]


> Что форму не ты, а дельфи создает

А все формы Delphi создает.
Прораммист лишь дает команды для этого.


 
Piter ©   (2004-05-31 23:57) [51]

Gero (31.05.04 23:52) [50]
А все формы Delphi создает


Ну вот и я про это.
А компоненты можно самому создать.
Это я хотел сказать про:

>Как у формы можно конструктор перекрыть...
элементарно. также как и у любого другого класса


Не так же. От практически любого другого класса ты можешь сделать наследника и там перекрыть любой метод. А с формами ни фига. Только если перекрывать метод уже объявленной Дельфей формы


 
Gero ©   (2004-06-01 00:01) [52]


> От практически любого другого класса ты можешь сделать наследника
> и там перекрыть любой метод. А с формами ни фига.


unit MyCoolForm;

interface

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

type
TMyCoolForm = class(TForm)
private
  { Private declarations }
public
  { Public declarations }
  constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMyCoolForm.Create(AOwner: TComponent);
begin
ShowMessage("aaa");
inherited;
end;

end.


 
Piter ©   (2004-06-01 00:10) [53]

Gero (01.06.04 00:01) [52]

ну я не знаю весь твой код, не понять. Давай так - попробуй сделать наследника от TMyCoolForm :)


 
Gero ©   (2004-06-01 00:11) [54]


> Piter ©   (01.06.04 00:10)

Хватит прикалываться.


 
Piter ©   (2004-06-01 00:12) [55]

Gero (01.06.04 00:11) [54]

а я не прикалываюсь - если сделаешь, с меня пиво


 
kombat ©   (2004-06-01 00:14) [56]

ну перекрыть конечно можно, даже без переопределения конструктора
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 ShowMessage("bbb");
 inherited;
 ShowMessage("ccc");
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ShowMessage("bbb");
 inherited;
 ShowMessage("ccc");
end;

end.
==============
но форма создается через File/New
правда я видел методы для загрузки ресурса формы из файла или поля БД, но все равно это ресурс должен быть предваритеьно создан.


 
Piter ©   (2004-06-01 00:15) [57]

kombat (01.06.04 00:14) [56]
но форма создается через File/New


эге... это противоречит постановке задачи :)


 
Piter ©   (2004-06-01 00:16) [58]

Это опять же будет форма, созданная Дельфи...


 
kombat ©   (2004-06-01 00:20) [59]

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


 
nikkie ©   (2004-06-01 00:25) [60]

То и значит. Что форму не ты, а дельфи создает... Как правильно заметил Nikkie вызовом Application.CreateForm(TForm1, Form1);
хочешь ли ты сказать, что эту форму нельзя создать TForm1.Create?


 
Gero ©   (2004-06-01 00:30) [61]


> а я не прикалываюсь - если сделаешь, с меня пиво

Пиво мне бандеролью высылать будешь? ;)

unit CoolForms;

interface

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

type

TMyCoolForm = class(TForm)
private
 { Private declarations }
public
 { Public declarations }
 constructor Create(AOwner: TComponent); override;
end;

TMyCoolForm2 = class(TMyCoolForm)
private
 { Private declarations }
public
 { Public declarations }
 constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMyCoolForm.Create(AOwner: TComponent);
begin
 GlobalNameSpace.BeginWrite;
 try
   CreateNew(AOwner);
   if (ClassType <> TForm) and not (csDesigning in ComponentState) then
   begin
     if OldCreateOrder then DoCreate;
   end;
 finally
   GlobalNameSpace.EndWrite;
 end;
end;

constructor TMyCoolForm2.Create(AOwner: TComponent);
begin
 inherited;
 ShowMessage("Пиво - это good! ;)");
end;

end.


 
Piter ©   (2004-06-01 00:47) [62]

Gero (01.06.04 00:30) [61]
TMyCoolForm


интересную ты форму создал... положи на TMyCoolForm какой-нибудь Button и запусти... нету батона... куда пропал? :)


 
sniknik ©   (2004-06-01 01:05) [63]

подожди не высылай ему пиво, высылай мне, я тебя проще научу делать, без писания кода руками!

первое действие - создаеш форму. (ну в курсе, ткнуть мышой в "new form")
второе действие (да кстати не забудь первую обозвать MyCoolForm) лезеш в file-> new -> other -> project1(или как оно у тебя там будет) выбираеш MyCoolForm (то что она inherited уже будет стоять).
все, создано.
теперь еще раз подумай, куда высылать пиво, и высылай по справедливости, в неограниченных количествах.

p.s. а славно вы здесь развлекаетесь, мне понравилось.
p.p.s. Piter либо всех разводит либо ему нельзя ничего обьяснить в принципе, неужели еще неясно?


 
имя   (2004-06-01 08:39) [64]

Удалено модератором


 
Gero ©   (2004-06-01 08:39) [65]


> Piter ©   (01.06.04 00:47)

"Ну вы блин даете"(c)

> От практически любого другого класса ты можешь сделать наследника
> и там перекрыть любой метод. А с формами ни фига.


> Давай так - попробуй сделать наследника от TMyCoolForm :)

[61]
Метод перекрыл? Перекрыл. Причем, как ты и хотел, конструктор.
Наследника от TMyCoolForm создал? Создал. Причем так, как ты и хотел, не через NewForm, а создающийся в RT.
Блин, так ТЫ ТЕПЕРЬ ЕЩЕ И КОМПОНЕНТЫ ХОЧЕШЬ НА НЕЕ В DESIGN TIME КИДАТЬ???

Либо ты надо мной издеваешься(и не только надо мной), либо тебе пора отдохнуть от компа недельку-другую. Чем больше, тем лучше.


 
имя   (2004-06-01 08:40) [66]

Удалено модератором


 
Piter ©   (2004-06-01 18:42) [67]

sniknik (01.06.04 01:05) [63]
первое действие - создаеш форму. (ну в курсе, ткнуть мышой в "new form")


а ты бы почитал сначала, что я пишу, прежде чем тут шутить шутки несмешные. Кажется четко было сказано, что форма должна создаваться ручками, а не с помощью Delphi IDE

sniknik (01.06.04 01:05) [63]
теперь еще раз подумай, куда высылать пиво


угу. Уже высылаю. Еще только расскажи что-нибудь...

Gero (01.06.04 08:39) [65]
Блин, так ТЫ ТЕПЕРЬ ЕЩЕ И КОМПОНЕНТЫ ХОЧЕШЬ НА НЕЕ В DESIGN TIME КИДАТЬ???


Хочу! Только я хочу кидать компоненты не на наследованную форму, а на сам экземпляр TCoolForm! Я же вижу форму CoolForm в Дельфи? Почему я не имею право туда кинуть компонент? Потому что от этой формы будет наследоваться другая форма и она уже теперь не пригодна для редактирования в Design Time?

Ты действительно сделал так, что от TCoolForm можно делать наследников! Но при этом функциональность самой TCoolForm потеряна. Разве это дело?

Представь себе, что ты для того, чтобы можно было сделать наследника от TWinControl переписал его! И теперь TWinControl не имеет Handle!
Ну и нафиг он кому будет такой нужен?


 
nikkie ©   (2004-06-01 19:02) [68]

>Piter
если тебе несколько человек говорят, что ты тупишь, наверное это повод задуматься?

в [38] приведен пример формы в которой
1. перекрыт конструктор
2. ее можно создавать с помощью TForm1.Create
3. на нее можно кидать компоненты и в ран-тайме эти компоненты будут присутствовать.

в [49] ты пишешь похожий класс TMyForm, но выкидываешь ссылку на dfm-файл. после этого жалуешься, что TMyForm.Create не работает.

в [61] Gero приводит тебе пример формы без dfm-файла. но тебя это не устраивает - ты хочешь теперь кидать компоненты на форму! какая форма, если ты сам ссылку {$R *.DFM} удалил и привел пример программы из одного dpr-файла?


 
Piter ©   (2004-06-01 19:29) [69]

nikkie (01.06.04 19:02) [68]

а-а-а, теперь понятно. Тогда прошу прощения. Я был просто свято уверен, что TMyCoolForm это форма из DFM, думал просто, что Gero не полностью модуль процитировал. Тогда да, все верно. Примем [61] за пример правильного перекрытия конструктора формы. Но это никак не сочетается с:

элементарно. также как и у любого другого класса

не также. Вот. :)

Хотя даже я устал...  в общем, ладно, замяли эту тему, я не ожидал, что все выльется в такое...


 
Piter ©   (2004-06-01 20:04) [70]

Gero (01.06.04 08:39) [65]
тебе пора отдохнуть от компа недельку-другую. Чем больше, тем лучше


вот тут я с тобой абсолютно согласен... и не столько от компа, сколько от этого форума... потому что на компьютере я практически сейчас ничего больше и не занимаюсь :)


 
Gero ©   (2004-06-01 21:47) [71]


> Piter ©   (01.06.04 20:04)

Природа, шашлык, девочки... :)

P.S. А пиво все же мне торчишь ;)


 
Piter ©   (2004-06-15 00:51) [72]

Вот что в ФИДО советуют:

1 )В конструктор формы должен быть передан *ВЛАДЕЛЕЦ* формы. Т.е.
Application а не MainForm


этого я не понимаю... ну да, должен быть передан владелец, а почему MainForm не может быть владельцем?

2) И вообще привыкни создавать формы через
Application.CreateForm(...)


Что скажете? Может помочь?


 
Agent13 ©   (2004-06-15 01:08) [73]


> Что скажете? Может помочь?

Попробуй. Чё гадать-то теперь?



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

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.025 c
1-1087471661
Top100
2004-06-17 15:27
2004.07.04
Закрытие MDIChilde окна


3-1086783370
Лера
2004-06-09 16:16
2004.07.04
Direct Oracle Access


3-1086780439
Jean
2004-06-09 15:27
2004.07.04
UpdateSQL


3-1086686609
Lony
2004-06-08 13:23
2004.07.04
mySql...


8-1082600639
Boson
2004-04-22 06:23
2004.07.04
Фильтр НЧ