|
#1
|
|||
|
|||
Фреймы
Подскажите по вопросу.
Использую в проге фреймы. Не получается с одного фрейма обратиться к другому. Ну например поменять значение edit.text в первом фрейме, нажимая на кнопку во втором. |
#2
|
|||
|
|||
Тут надо смотреть как у тебя организовано создание этих фреймов.
Короче, код давай. |
#3
|
|||
|
|||
Код слизан с альфаскинов,
http://www.alphaskins.com/sfiles/demos/chatdemo.zip До этого даже не знал, что такое фреймы, всегда юзал формы, накатал нужный себе проект, изменив этот исходник, теперь не знаю, как быть... Закидайте тапками плиз! |
#4
|
|||
|
|||
Лень качать и разбираться. Просто выложи куски кода создания фреймов.
|
#5
|
|||
|
|||
Главная форма
Код:
*** public procedure OpenFrame(FrameType: TacFrame; Animated: boolean); *** procedure TMainForm.OpenFrame(FrameType: TacFrame; Animated: boolean); var OldFrame: TFrame; begin if not (FormData.CurrentMenuFrame is FrameType) then begin OldFrame := FormData.CurrentMenuFrame; if Animated and FormData.sSkinManager1.Effects.AllowAnimation then PrepareForAnimation(sPanel3, atcRunup); FormData.CurrentMenuFrame := FrameType.Create(Self); FormData.CurrentMenuFrame.Align := {alTop;//}alClient; FormData.CurrentMenuFrame.Parent := sPanel3; FreeAndNil(OldFrame); if Animated and FormData.sSkinManager1.Effects.AllowAnimation then AnimShowControl(sPanel3, 50, 255, atcRunup); end; end; FormData Код:
unit UnitData; interface uses SysUtils, Classes, Forms, ImgList, Controls, acAlphaImageList, sSkinManager, sSpeedButton, acAlphaHints; type TacFrame = class of TFrame; TFormData = class(TDataModule) sSkinManager1: TsSkinManager; sCharImageList1: TsCharImageList; sAlphaImageList1: TsAlphaImageList; sAlphaHints1: TsAlphaHints; public CurrentMenuFrame: TFrame; CurrentMenuBtn: TsSpeedButton; CurrentWorkFrame: TFrame; CurrentWorkBtn: TsSpeedButton; procedure OpenFrame(FrameType: TacFrame; SelectBtn: TsSpeedButton); procedure PaintSelRect(Bmp: TBitmap); end; var FormData: TFormData; implementation {$R *.dfm} uses sConst, sCommonData, sGraphUtils, sPanel, sVCLUtils, MainUnit; procedure TFormData.OpenFrame(FrameType: TacFrame; SelectBtn: TsSpeedButton); var OldFrame: TFrame; begin if (FrameType <> nil) and (CurrentWorkBtn <> SelectBtn) then begin MainForm.sSplitView2.SideShadow.Mode := ssmInternal; MainForm.PanelMain.SideShadow.Mode := ssmNone; MainForm.PanelMain.SkinData.SkinSection := ''; if CurrentWorkBtn <> nil then CurrentWorkBtn.SkinData.SkinSection := 'LBTN'; CurrentWorkBtn := SelectBtn; CurrentWorkBtn.SkinData.SkinSection := 'SELBTN'; if not (FormData.CurrentWorkFrame is FrameType) then begin OldFrame := FormData.CurrentWorkFrame; if sSkinManager1.Effects.AllowAnimation then PrepareForAnimation(MainForm.PanelContainer, atcRunup); FormData.CurrentWorkFrame := FrameType.Create(Application); FormData.CurrentWorkFrame.Align := alClient; FormData.CurrentWorkFrame.Parent := MainForm.PanelContainer; FreeAndNil(OldFrame); if sSkinManager1.Effects.AllowAnimation then AnimShowControl(MainForm.PanelContainer, 50, 255, atcRunup); end; end else begin if CurrentWorkBtn <> nil then begin CurrentWorkBtn.SkinData.SkinSection := 'LBTN'; CurrentWorkBtn := nil; end; if FormData.CurrentWorkFrame <> nil then FreeAndNil(FormData.CurrentWorkFrame); MainForm.sSplitView2.SideShadow.Mode := ssmNone; MainForm.PanelMain.SideShadow.Mode := ssmInternal; MainForm.PanelMain.SkinData.SkinSection := 'TRANSPARENT'; end; end; Открытие фрейма Код:
type TFrameAccount = class(TFrame) sSpeedButton1: TsSpeedButton; procedure sSpeedButton1Click(Sender: TObject); public destructor Destroy; override; end; implementation {$R *.dfm} uses MainUnit, UnitData, UnitFrameEmpty, UnitFrameAccountEdit, UnitFrameAccountCreate; destructor TFrameAccount.Destroy; begin FormData.CurrentWorkBtn := nil; inherited; end; procedure TFrameAccount.sSpeedButton1Click(Sender: TObject); begin FormData.OpenFrame(TFrameAccountCreate, TsSpeedButton(Sender)); end; end. |
#6
|
|||
|
|||
Ну, у тебя, вроде, сохраняется указатель на фрейм (FormData.CurrentMenuFrame). Вот через него и обращайся. Только надо еще откаститься к нужному классу фрейма. Например:
Код:
if FormData.CurrentMenuFrame Is TFrameWithEdit Then (FormData.CurrentMenuFrame As TFrameWithEdit).Edit1.Text := 'aaa'; |
#7
|
|||
|
|||
lmikle странно, но значения не передаются все равно!
|
#8
|
|||
|
|||
Ну, значит не того типа фрейм. Пройди построчно в дебаггере, посмотри что у тебя там в переменных.
|