TF-altProjekte/Experts/Ablage/TFWndFrame.mqh
super.admin 84cd1a7ab0 convert
2025-05-30 16:31:33 +02:00

396 lines
34 KiB
MQL5

//+------------------------------------------------------------------+
//| TFWndFrame.mqh |
//| Thorsten Fischer Copyright 2019 |
//| https://www.tfsystem.de |
//+------------------------------------------------------------------+
#property copyright "Thorsten Fischer Copyright 2019"
#property link "https://www.tfsystem.de"
#property version "1.00"
#include "..\..\Include\TF-Class\TFApp.mqh"
#include <Controls\WndContainer.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\BmpButton.mqh>
#include <Controls\WndClient.mqh>
//+------------------------------------------------------------------+
//| Resources |
//+------------------------------------------------------------------+
#resource "\\Images\\TFGUI\\Close.bmp"
#resource "\\Images\\TFGUI\\Right.bmp"
#resource "\\Images\\TFGUI\\Left.bmp"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CTFWndFrame :CWndContainer //: public CTFApp //CWndContainer
{
private:
CTFApp tfapp;
CPanel m_frame_border; // Frame Rahmen
CPanel m_frame_background; // Frame Hintergrund
CEdit m_frame_caption; // Frame Kopfzeile
CBmpButton m_frame_button_minmax; // Frame Button minmax
CBmpButton m_frame_button_close; // Frame Button close
CWndClient m_frame_client_area; // Frame Benutzerbereich
//--- Koordinaten
CRect m_frame_normal; // Frame Koordinaten normales Fenster
CRect m_frame_minimized; // Frame Koordinaten minimiertes Fenster
//--- Variablen
string m_frame_name; // Name des Frames
int ControlsBorderWidth; // Controls Rahmen Breite Standard 1
int ControlsButtonSize; // Controls Button weite Standard 16
int ControlsDialogButtonOff; // Controls Dialog Button offset Standard 3
int ControlsDialogCaptionHeight; // Controls Dialog Caption Kopf höhe 22
int ControlsDialogClientOff; // Controls Dialog Client offset Standard 2
color ControlsFrameBorderColorBorder; // Controls Frame Border Color Border C'0xF0,0xF0,0xF0'
color ControlsFrameBorderColorBG; // Controls Frame Border Color BG C'0xF0,0xF0,0xF0'
color ControlsFrameBGColorBorder; // Controls Frame BG Color Border C'0xF0,0xF0,0xF0'
color ControlsFrameBGColorBG; // Controls Frame BG Color BG C'0xF0,0xF0,0xF0'
//--- Flags
bool m_panel_flag; // Frame integriertes Fenster flag
bool m_minimized; // Frame minimiert flag
protected:
//--- create frame controls
virtual bool CreateFrameBorder(void);
virtual bool CreateFrameBackground(void);
virtual bool CreateFrameCaption(void);
virtual bool CreateFrameButtonMinMax(void);
virtual bool CreateFrameButtonClose(void);
virtual bool CreateFrameClientArea(void);
void CaptionAlignment(const int flags,const int left,const int top,const int right,const int bottom) { m_frame_caption.Alignment(flags,left,top,right,bottom); }
public:
CTFWndFrame();
~CTFWndFrame();
virtual bool Create(const long chart=0,const string name="Hauptfenster",const int subwin=0,const int x1=20,const int y1=20,const int x2=200,const int y2=100); // Frame erstellen
virtual bool Load(const int file_handle); // Load Data
virtual bool Save(const int file_handle); // Save Data
virtual string FrameName(void) const { return(m_frame_name); } // Frame Namen auslesen
virtual void FrameName(const string name) { m_frame_name=name; } // Frame Namen setzen
virtual bool FrameNormalPosition(const int l=0,const int t=0,const int r=100,const int b=100); //
virtual bool FrameMinimizedPosition(const int l=0,const int t=0,const int r=10,const int b=10); //
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTFWndFrame::CTFWndFrame() : m_panel_flag(false),
m_minimized(false),
ControlsBorderWidth(1),
ControlsButtonSize(16),
ControlsDialogButtonOff(3),
ControlsDialogCaptionHeight(22),
ControlsDialogClientOff(2),
ControlsFrameBorderColorBorder(clrWhite),
ControlsFrameBorderColorBG(clrBlue),
ControlsFrameBGColorBorder(clrGray),
ControlsFrameBGColorBorder(clrGreen)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CTFWndFrame::~CTFWndFrame()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTFWndFrame::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
{
//--- call method of parent class
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!CWndContainer::Create(chart,name,subwin,x1,y1,x2,y2))
return(false);
//--- create frame controls
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
if(!m_panel_flag && !CreateFrameBorder())
return(false);
//Test();
//if(!CreateFrameBackground())
// return(false);
////Test();
// if(!CreateFrameCaption())
// return(false);
////Test();
// if(!CreateFrameClientArea())
// return(false);
////Test();
// if(!CreateFrameButtonMinMax())
// return(false);
////Test();
// if(!CreateFrameButtonClose())
// return(false);
//Test();
//--- set up additional areas
//Redraw();
//m_frame_normal.SetBound(m_rect);
//DPrint("vor Disable");
//Test();
//m_frame_border.Disable();
tfapp.DPrint("vor Hide");
tfapp.Test();
m_frame_border.Hide();
tfapp.DPrint("vor Show");
tfapp.Test();
m_frame_border.Show();
// DPrint("vor Enable");
// Test();
////m_frame_border.Enable();
////DPrint("vor Hide Nach Enable");
////Test();
// m_frame_background.Hide();
// DPrint("vor Show nach Enable");
// Test();
// m_frame_background.Show();
//DPrint("vor m_frame_minimized");
//Test();
//m_frame_border.Align(m_frame_minimized);
//DPrint("vor m_frame_normal");
//Test();
//m_frame_border.Align(m_frame_normal);
//Test();
//m_frame_border.Enable();
//int i;
//for(i=1;i<11;i++)
// {
// m_frame_border.BorderType(BORDER_FLAT);
// Test();
// m_frame_border.BorderType(BORDER_RAISED);
// Test();
// m_frame_border.BorderType(BORDER_SUNKEN);
// Test();
// }
//--- fertig
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameBorder(void)
{
//--- coordinates
int x1=0;
int y1=0;
int x2=Width();
int y2=Height();
//--- create
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_border.Create(m_chart_id,m_name+"_Border",m_subwin,x1,y1,x2,y2))
return(false);
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
if(!m_frame_border.ColorBorder(ControlsFrameBorderColorBorder))
return(false);
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
if(!m_frame_border.ColorBackground(ControlsFrameBorderColorBG))
return(false);
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
if(!Add(m_frame_border))
return(false);
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
m_frame_border.Alignment(WND_ALIGN_CLIENT,0,0,0,0);
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
tfapp.Test();
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| Create background |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameBackground(void)
{
int off=(m_panel_flag) ? 0:ControlsBorderWidth;
//--- coordinates
int x1=off;
int y1=off;
int x2=Width()-off;
int y2=Height()-off;
//--- create
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_background.Create(m_chart_id,m_name+"_BackGround",m_subwin,x1,y1,x2,y2))
return(false);
tfapp.Test();
color border=(m_panel_flag) ? ControlsFrameBGColorBG : ControlsFrameBGColorBorder;
if(!m_frame_background.ColorBorder(border))
return(false);
tfapp.Test();
if(!m_frame_background.ColorBackground(ControlsFrameBGColorBG))
return(false);
tfapp.Test();
if(!Add(m_frame_background))
return(false);
tfapp.Test();
m_frame_background.Alignment(WND_ALIGN_CLIENT,off,off,off,off);
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| Create window title |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameCaption(void)
{
int off=(m_panel_flag) ? 0:2*ControlsBorderWidth;
//--- coordinates
int x1=off;
int y1=off;
int x2=Width()-off;
int y2=y1+ControlsDialogCaptionHeight;
//--- create
tfapp.CAusgabe(ControlsFrameCaptionColorBG);
tfapp.CAusgabe(ControlsFrameCaptionColorBorder);
tfapp.CAusgabe(ControlsFrameCaptionColorText);
tfapp. DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_caption.Create(m_chart_id,m_name+"_Caption",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_frame_caption.ColorBorder(ControlsFrameCaptionColorBorder))
return(false);
if(!m_frame_caption.ColorBackground(ControlsFrameCaptionColorBG))
return(false);
if(!m_frame_caption.Color(ControlsFrameCaptionColorText))
return(false);
if(!m_frame_caption.ReadOnly(true))
return(false);
if(!m_frame_caption.Text(m_name))
return(false);
if(!CWndContainer::Add(m_frame_caption))
return(false);
m_frame_caption.Alignment(WND_ALIGN_WIDTH,off,0,off,0);
if(!m_panel_flag)
m_frame_caption.PropFlags(WND_PROP_FLAG_CAN_DRAG);
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| Create client area |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameClientArea(void)
{
int off=(m_panel_flag) ? 0:2*ControlsBorderWidth;
//--- coordinates
int x1=off+ControlsDialogClientOff;
int y1=off+ControlsDialogCaptionHeight;
int x2=Width()-(off+ControlsDialogClientOff);
int y2=Height()-(off+ControlsDialogClientOff);
//--- create
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_client_area.Create(m_chart_id,m_name+"_ClientArea",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_frame_client_area.ColorBackground(ControlsFrameCAColorBG))
return(false);
if(!m_frame_client_area.ColorBorder(ControlsFrameCAColorBorder))
return(false);
if(!CWndContainer::Add(m_frame_client_area))
return(false);
m_frame_client_area.Alignment(WND_ALIGN_CLIENT,x1,y1,x1,x1);
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| Create the "MinMax" button |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameButtonMinMax(void)
{
int off=(m_panel_flag) ? 0 : 2*ControlsBorderWidth;
//--- coordinates
int x1=Width()-off-2*(ControlsButtonSize+ControlsDialogButtonOff);
int y1=off+ControlsDialogButtonOff;
int x2=x1+ControlsButtonSize;
int y2=y1+ControlsButtonSize;
//--- create
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_button_minmax.Create(m_chart_id,m_name+"_ButtonMinMax",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_frame_button_minmax.BmpNames("\\Images\\TFGUI\\Right.bmp","\\Images\\TFGUI\\Left.bmp"))
return(false);
if(!CWndContainer::Add(m_frame_button_minmax))
return(false);
m_frame_button_minmax.Locking(true);
m_frame_button_minmax.Alignment(WND_ALIGN_RIGHT,0,0,off+ControlsButtonSize+2*ControlsDialogButtonOff,0);
//--- change caption
CaptionAlignment(WND_ALIGN_WIDTH,off,0,off+2*(ControlsButtonSize+ControlsDialogButtonOff),0);
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| Create the "Close" button |
//+------------------------------------------------------------------+
bool CTFWndFrame::CreateFrameButtonClose(void)
{
int off=(m_panel_flag) ? 0 : 2*ControlsBorderWidth;
//--- coordinates
int x1=Width()-off-(ControlsButtonSize+ControlsDialogButtonOff);
int y1=off+ControlsDialogButtonOff;
int x2=x1+ControlsButtonSize;
int y2=y1+ControlsButtonSize;
//--- create
tfapp.DPrint(__FUNCTION__+", m_chart_id = "+(string) m_chart_id);
if(!m_frame_button_close.Create(m_chart_id,m_name+"_ButtonClose",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_frame_button_close.BmpNames("\\Images\\TFGUI\\Close.bmp"))
return(false);
if(!CWndContainer::Add(m_frame_button_close))
return(false);
m_frame_button_close.Alignment(WND_ALIGN_RIGHT,0,0,off+ControlsDialogButtonOff,0);
//--- change caption
CaptionAlignment(WND_ALIGN_WIDTH,off,0,off+(ControlsButtonSize+ControlsDialogButtonOff),0);
//--- succeed
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTFWndFrame::FrameNormalPosition(const int l,const int t,const int r,const int b)
{
m_frame_normal.left=l;
m_frame_normal.top=t;
m_frame_normal.right=r;
m_frame_normal.bottom=b;
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CTFWndFrame::FrameMinimizedPosition(const int l,const int t,const int r,const int b)
{
m_frame_minimized.left=l;
m_frame_minimized.top=t;
m_frame_minimized.right=r;
m_frame_minimized.bottom=b;
return(true);
}
//+------------------------------------------------------------------+
//| Load Data |
//+------------------------------------------------------------------+
bool CTFWndFrame::Load(const int file_handle)
{
//---
tfapp.DPrint(__FUNCTION__+" durchlaufen");
//---
return(true);
}
//+------------------------------------------------------------------+
//| Save Data |
//+------------------------------------------------------------------+
bool CTFWndFrame::Save(const int file_handle)
{
//---
tfapp.DPrint(__FUNCTION__+" durchlaufen");
//---
return(true);
}
//+------------------------------------------------------------------+