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

Вниз

TComboBox+TEdit   Найти похожие ветки 

 
Тимофей   (2007-05-17 14:21) [0]

Друзья, товарищи, помогите пожалуйста с созданием компонента на базе TEdit и TComboBox. По задумке он должен по выбору единиц измерения из TComboBox менять значения в TEdit. Бросьте пожалуйста исходники. Заранее благодарю.


 
clickmaker ©   (2007-05-17 14:35) [1]


> Бросьте пожалуйста исходники

жжошь!
может сразу web-money на счет? :)


 
DrAndrey ©   (2007-05-17 14:38) [2]

Укажи эти самые единицы измерения, коэффициенты пересчета, тип значения на выходе - число или текст?


 
Тимофей   (2007-05-18 11:28) [3]

В TComboBox:
сек
метры
В TEdit:
число
Заранее спасибо


 
ЮЮ ©   (2007-05-18 11:35) [4]

Положи их рядом. Зачем нужен компонент на каждый чих?


 
Плохиш ©   (2007-05-18 11:42) [5]


> По задумке он должен по выбору единиц измерения из TComboBox
> менять значения в TEdit.


> сек
> метры

Интересно, 1 сек это сколько метров?

> ЮЮ ©   (18.05.07 11:35) [4]
> Положи их рядом. Зачем нужен компонент на каждый чих?

В вопросе главное - > Бросьте пожалуйста исходники.


 
DrAndrey ©   (2007-05-18 11:55) [6]

> сек
> метры

>Интересно, 1 сек это сколько метров?

Объясни толком задачу, какие метры в какие секунды?


 
Тимофей   (2007-05-21 12:32) [7]

У меня уже дела продвинулись. Написал класс, Delphi все компилирует, но класс не работает. Вот текст. Помогите разобраться, в чем ошибка?
type
   TComBEdit = class
    private
     fX: real;
     fV: real;
     fk: integer;
     fEdit:TEdit;
     fComboBox:TComboBox;
     Constructor Create;
     Destructor Destroy;
     procedure GetX(Sender:TObject);
     procedure SetX(Sender:TObject;NewX:real);
     public
     //property X:real read GetX write SetX;
     property k:integer read fk;
     property V:real read fV;
    end;
................
Constructor TComBEdit.Create();
begin
fEdit:=TEdit.Create(;
fComboBox:=TComboBox.Create();
OnExit:=GetX;
//fEdit.OnExit:=fEdit.
fComBEdit.GetX;
if fComboBox.OnChange then do
fComBEdit.SetX;
end;

function fComBEdit.GetX(Sender: TObject);
begin
case fComboBox.ItemIndex of
0:fk:=1;
1:fk:=1024;
2:fk:=1024*1024;
3:fk:=8;
4:fk:=8*1024;
5:fk:=8*1024*1024;
end;
fV:=StrToInt(fEdit.Text);
fX:=fV*fk;
Result:=fX;
end;

procedure fComBEdit.SetX(NewX:real);
begin
case fComboBox.ItemIndex of
0:fk:=1;
1:fk:=1024;
2:fk:=1024*1024;
3:fk:=8;
4:fk:=8*1024;
5:fk:=8*1024*1024;
end;
fEdit.Text:=FloatToStr(NewX/fk);
end;


 
Плохиш ©   (2007-05-21 12:36) [8]


> Тимофей   (21.05.07 12:32) [7]
> У меня уже дела продвинулись. Написал класс, Delphi все
> компилирует

Врёшь... у тебя куча синтаксических ошибок в коде...


 
{RASkov} ©   (2007-05-21 12:43) [9]

> [7] Тимофей   (21.05.07 12:32)

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


 
Jkmuf!   (2007-05-21 12:56) [10]

[9] {RASkov} ©   (21.05.07 12:43)
> да и само чудо фик знает кто оно...

Это класс:

>   TComBEdit = class


 
{RASkov} ©   (2007-05-21 13:27) [11]

> [10] Jkmuf!   (21.05.07 12:56)
> Это класс:

Это Супер Класс )
И оно(чудо) точно не может сожержать на себе контролы(в данном случае TComboBox и TEdit). И куда это чудо их помещает(кто их "рисует") фик знает.


 
Сергей М. ©   (2007-05-21 13:39) [12]


> Тимофей   (21.05.07 12:32) [7]
> У меня уже дела продвинулись


Придется все же вернуть "дела" на стартовую позицию)

Компонент - это класс-наследник TComponent, а твой класс почему-то вдруг есть наследник TObject..


 
Jkmuf!   (2007-05-21 14:03) [13]

> [11] {RASkov} ©   (21.05.07 13:27)

Я ":)" Забыл написовать [10] - мой (Так получилось)


 
iXT ©   (2007-05-21 14:12) [14]

В смысле мой :)


 
Тимофей   (2007-05-22 13:45) [15]

Друзья, я прописал класс следующим образом:
type
   TComBEdit = class
    private
     fX: real;
     fV: real;
     fk: integer;
     fEdit:TEdit;
     fComboBox:TComboBox;
     fPanel:TPanel;
     Constructor Create(OwnerParent:TPanel);
     Destructor Destroy;
     procedure GetEdit(Sender:TObject);
     function GetX:real;
     procedure SetEdit(Sender:TObject);
     procedure SetX(fX:real);
     public
     property X:real read GetX write SetX;
     property k:integer read fk;
     property V:real read fV;
    end;
........................
var
 MainForm: TForm1;
 ComBEdit: TComBEdit;
..........................
Constructor TComBEdit.Create(OwnerParent:TPanel);
begin
fPanel:=OwnerParent;
fEdit:=TEdit.Create(OwnerParent);
fComboBox:=TComboBox.Create(OwnerParent);
fEdit.OnExit:=GetEdit;
GetX;
//fEdit.OnExit:=fEdit.
//fComBEdit.GetX;
fComboBox.OnChange:=SetEdit;
SetX(fX);
//fComBEdit.SetX;
end;

Destructor TComBEdit.Destroy;
begin
fPanel:=nil;
fEdit.Destroy;
fComboBox.Destroy;
end;

procedure TComBEdit.GetEdit(Sender: TObject);
begin
GetX;
end;

procedure TComBEdit.SetEdit(Sender: TObject);
begin
SetX(fX);
end;

function TComBEdit.GetX:real;
begin
case fComboBox.ItemIndex of
0:fk:=1;
1:fk:=1024;
2:fk:=1024*1024;
3:fk:=8;
4:fk:=8*1024;
5:fk:=8*1024*1024;
end;
fV:=StrToInt(fEdit.Text);
fX:=fV*fk;
Result:=fX;
end;

procedure TComBEdit.SetX(fX:real);
begin
case fComboBox.ItemIndex of
0:fk:=1;
1:fk:=1024;
2:fk:=1024*1024;
3:fk:=8;
4:fk:=8*1024;
5:fk:=8*1024*1024;
end;
fEdit.Text:=FloatToStr(fX/fk);
end;
Пожалуйста, помогите найти ошибку. Компиляция проходит успешно.


 
Тимофей   (2007-05-22 13:47) [16]

Вот второй вариант. Мне с ним помогли, но компиляция не выполняется. Помогите пожалуйста найти здесь ошибку, если можете:
// -----------------------------------------------------------------------------
type CAbstractEditBox  = class(TObject)
 constructor Create(var edit : TEdit; var box : TComboBox);
 destructor Destroy; override;
 procedure recalc(); virtual; abstract;

 protected
   m_edit : ^TEdit;
   m_box : ^TComboBox;
   m_pastUnit : string;
end;

// -----------------------------------------------------------------------------
type CTimeEditBox = class(CAbstractEditBox)
 constructor Create(var edit : TEdit; var box : TComboBox);
 destructor Destroy; override;
 procedure recalc(); override;
end;

// -----------------------------------------------------------------------------
type CDistanceEditBox = class(CAbstractEditBox)
 constructor Create(var edit : TEdit; var box : TComboBox);
 destructor Destroy; override;
 procedure recalc(); override;
end;

// -----------------------------------------------------------------------------
type
 TForm1 = class(TForm)
   timeEdit: TEdit;
   timeBox: TComboBox;
   distEdit: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   distBox: TComboBox;
   procedure FormCreate(Sender: TObject);
   procedure timeBoxChange(Sender: TObject);
   procedure distBoxChange(Sender: TObject);
 private
   m_timeEditBox : CTimeEditBox;
   m_distEditBox : CDistanceEditBox;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

// -----------------------------------------------------------------------------
// class CAbstractEditBox
// -----------------------------------------------------------------------------
constructor CAbstractEditBox.Create(var edit : TEdit; var box : TComboBox);
begin
 inherited Create;

 m_edit := @edit;
 m_box := @box;
 m_pastUnit := box.Text;
end;

// -----------------------------------------------------------------------------
destructor CAbstractEditBox.Destroy;
begin
 inherited Destroy;
end;

// -----------------------------------------------------------------------------
// class CTimeEditBox
// -----------------------------------------------------------------------------
constructor CTimeEditBox.Create(var edit : TEdit; var box : TComboBox);
begin
 inherited Create(edit, box);
end;

// -----------------------------------------------------------------------------
destructor CTimeEditBox.Destroy;
begin
 inherited Destroy;
end;

// -----------------------------------------------------------------------------
procedure CTimeEditBox.recalc();
begin
 // åñëè âûáðàëè òó æå åä.èçìåðåíèÿ, ÷òî è áûëà äî ýòîãî - íå ñ÷èàòåì
 if(m_pastUnit = m_box^.Text) then
   Exit

 // åñëè íè÷åãî íå áûëî ââåäåíî
 else if(m_edit^.Text = "") then
 begin
   m_pastUnit := m_box^.Text;
   Exit;
 end

 // sec to some
 else if((m_pastUnit = "sec") and (m_box^.Text = "min")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)/60, ffGeneral, 4, 8)
 else if((m_pastUnit = "sec") and (m_box^.Text = "hour")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)/3600, ffGeneral, 4, 8)

 // min to some
 else if((m_pastUnit = "min") and (m_box^.Text = "sec")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)*60, ffGeneral, 4, 8)
 else if((m_pastUnit = "min") and (m_box^.Text = "hour")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)/60, ffGeneral, 4, 8)

 // hour to some
 else if((m_pastUnit = "hour") and (m_box^.Text = "sec")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)*3600, ffGeneral, 4, 8)
 else if((m_pastUnit = "hour") and (m_box^.Text = "min")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)*60, ffGeneral, 4, 8);

 m_pastUnit := m_box^.Text;
end;

// -----------------------------------------------------------------------------
// class CDistanceEditBox
// -----------------------------------------------------------------------------
constructor CDistanceEditBox.Create(var edit : TEdit; var box : TComboBox);
begin
 inherited Create(edit, box);
end;

// -----------------------------------------------------------------------------
destructor CDistanceEditBox.Destroy;
begin
 inherited Destroy;
end;

// -----------------------------------------------------------------------------
procedure CDistanceEditBox.recalc;
begin
 // åñëè âûáðàëè òó æå åä.èçìåðåíèÿ, ÷òî è áûëà äî ýòîãî - íå ñ÷èàòåì
 if(m_pastUnit = m_box^.Text) then
   Exit

 // åñëè íè÷åãî íå áûëî ââåäåíî
 else if(m_edit^.Text = "") then
 begin
   m_pastUnit := m_box^.Text;
   Exit;
 end

 // m to km
 else if((m_pastUnit = "m") and (m_box^.Text = "km")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)/1000, ffGeneral, 4, 8)

 // km to m
 else if((m_pastUnit = "km") and (m_box^.Text = "m")) then
   m_edit^.Text := FloatToStrF(StrToFloat(m_edit^.Text)*1000, ffGeneral, 4, 8);

 m_pastUnit := m_box^.Text;
end;

// -----------------------------------------------------------------------------
// class TForm1
// -----------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
 m_timeEditBox := CTimeEditBox.Create(timeEdit, timeBox);
 m_distEditBox := CDistanceEditBox.Create(distEdit, distBox);
end;

// -----------------------------------------------------------------------------
procedure TForm1.timeBoxChange(Sender: TObject);
begin
 m_timeEditBox.recalc;
end;

// -----------------------------------------------------------------------------
procedure TForm1.distBoxChange(Sender: TObject);
begin
 m_distEditBox.recalc;
end;
Ошибку выдает следующую:
Could not create output file "Unit1.dcu"


 
iXT ©   (2007-05-22 13:59) [17]

"Не могу создать файл Unit1.dcu" Чем то занят наверное :)


 
Плохиш ©   (2007-05-22 14:03) [18]


> Тимофей   (22.05.07 13:45) [15]

Надо установить свойства Parent у создаваемых тобой компотентов TEdit и TComboBox.


 
iXT ©   (2007-05-22 14:21) [19]

> Надо установить свойства Parent у создаваемых тобой компотентов
> TEdit и TComboBox.

И поэтому он не может создать DCU? :)


 
Тимофей   (2007-05-22 14:33) [20]

А по первому варианту кто-нибудь подсказать что-нибуть может? Может быть перерисовку эдитов и боксов нужно совершать (создавать объект) при генерации формы? Прошу, умоляю помогите кодом!!!


 
Johnmen ©   (2007-05-22 14:46) [21]

Что, припекает? Завтра сдавать? :)


 
DrAndrey ©   (2007-05-22 14:50) [22]

to Тимофей: "Остров докторо Моро" Г.Уэлса читал? Зачем скрещивать 2 нормальных компонента, чтобы получить одного уродца?! Неделю уже ломаешь голову? Я в своё время тоже хотел объединить Едит со СпидБаттоном и рад, что отказался от этой затеи.


 
Тимофей   (2007-05-22 15:03) [23]


> Зачем скрещивать 2 нормальных компонента, чтобы получить
> одного уродца?!

Я бы рад отказаться от этой затеи, дак препод поставил эту задачу.


 
DrAndrey ©   (2007-05-22 16:19) [24]

>Плохиш ©   (22.05.07 14:03) [18]

> Тимофей   (22.05.07 13:45) [15]

>Надо установить свойства Parent у создаваемых тобой компотентов TEdit и >TComboBox.

type
 TComboEdit = class(TPanel)
 private
  FEdit: TEdit;
  FComboBox: TComboBox;
   { Private declarations }
 protected
   { Protected declarations }
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   property Edit: TEdit read FEdit;
   property ComboBox: TComboBox read FComboBox;
 published
   { Published declarations }
 end;

///

constructor TComboEdit.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FEdit := TEdit.Create(Self);
 FEdit.Width:= 60;
 FEdit.Visible := True;
 FEdit.Parent := Self;

 FComboBox := TComboBox.Create(Self);
 FComboBox.Width:= 60;
 FComboBox.Left:= 64;
 FComboBox.Visible := True;
 FComboBox.Parent := Self;
 //Self.AutoSize:= True;
 //Self.BevelOuter:= bvNone;

end;

destructor TComboEdit.Destroy;
begin
 FComboBox := nil;  FEdit := nil;  inherited Destroy;
end;

Изучай исходники vcl, там все написано.


 
Плохиш ©   (2007-05-22 16:31) [25]


> iXT ©   (22.05.07 14:21) [19]
> > Надо установить свойства Parent у создаваемых тобой компотентов
>
> > TEdit и TComboBox.
>
> И поэтому он не может создать DCU?

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


 
Тимофей   (2007-05-23 12:06) [26]

Спасибо огромное! Буду испытовать.



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

Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.046 c
2-1179816234
unnamed777
2007-05-22 10:43
2007.06.17
GetFileSize


15-1179488147
Дельфинчик
2007-05-18 15:35
2007.06.17
Окошки Виста - кто что думает?


1-1176985318
DestWib
2007-04-19 16:21
2007.06.17
Как удалить файл, напрямую записывая нули на винт


15-1179689134
Kostafey
2007-05-20 23:25
2007.06.17
Как вникать в структуру базы данных ?


2-1180394288
vasIZmax
2007-05-29 03:18
2007.06.17
Как нарисовать пружину?))





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