Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.04.2019, 09:37
pikabu pikabu вне форума
Прохожий
 
Регистрация: 27.12.2017
Сообщения: 30
Версия Delphi: 10.1
Репутация: 10
По умолчанию Фреймы

Подскажите по вопросу.
Использую в проге фреймы.
Не получается с одного фрейма обратиться к другому.
Ну например поменять значение edit.text в первом фрейме, нажимая на кнопку во втором.
Ответить с цитированием
  #2  
Старый 10.04.2019, 19:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тут надо смотреть как у тебя организовано создание этих фреймов.
Короче, код давай.
Ответить с цитированием
  #3  
Старый 10.04.2019, 20:19
pikabu pikabu вне форума
Прохожий
 
Регистрация: 27.12.2017
Сообщения: 30
Версия Delphi: 10.1
Репутация: 10
По умолчанию

Код слизан с альфаскинов,
http://www.alphaskins.com/sfiles/demos/chatdemo.zip
До этого даже не знал, что такое фреймы, всегда юзал формы, накатал нужный себе проект, изменив этот исходник, теперь не знаю, как быть... Закидайте тапками плиз!
Ответить с цитированием
  #4  
Старый 11.04.2019, 01:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Лень качать и разбираться. Просто выложи куски кода создания фреймов.
Ответить с цитированием
  #5  
Старый 11.04.2019, 07:55
pikabu pikabu вне форума
Прохожий
 
Регистрация: 27.12.2017
Сообщения: 30
Версия Delphi: 10.1
Репутация: 10
По умолчанию

Главная форма

Код:
***
 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  
Старый 12.04.2019, 18:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, у тебя, вроде, сохраняется указатель на фрейм (FormData.CurrentMenuFrame). Вот через него и обращайся. Только надо еще откаститься к нужному классу фрейма. Например:
Код:
if  FormData.CurrentMenuFrame Is TFrameWithEdit Then
  (FormData.CurrentMenuFrame As TFrameWithEdit).Edit1.Text := 'aaa';
Ответить с цитированием
  #7  
Старый 13.04.2019, 20:08
pikabu pikabu вне форума
Прохожий
 
Регистрация: 27.12.2017
Сообщения: 30
Версия Delphi: 10.1
Репутация: 10
По умолчанию

lmikle странно, но значения не передаются все равно!
Ответить с цитированием
  #8  
Старый 13.04.2019, 20:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, значит не того типа фрейм. Пройди построчно в дебаггере, посмотри что у тебя там в переменных.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter