퇴근5분전

 # 디자이너 화면...

 

도구상자,  디자이너, 속성창

 

 

 

# 디자이너 개체 구성

 

 

 

# 기본 컨셉

 1. 디자이너 : 화면구성을 런타임상에서 작성!

 2. 코드생성 : 디자이너에서 만들어진 구성을 각 사이트에 맞춤형 표준 코드로 변환!

 3. 화면내용을 디자이너에서 미리 확인 및 스토리보드(ppt)로 추출.

 

 

 

'# 9) My Program(.NET) > JsFW40' 카테고리의 다른 글

금전관리 프로그램.  (0) 2015.09.26
그리드 폼 만들기 (2)  (0) 2014.03.18
그리드 폼 만들기 (1)  (0) 2014.03.15
jsfw ] New Version!  (0) 2012.05.13
[JsFW40] 코딩을 시작하다!!  (0) 2010.11.10

 

조건패널용 레이아웃 그리드

 

라벨은 RowIndex = 0, ColumnIndex = 0, RowSpan = 1, ColumnSpan = 1

텍스트박스 RowIndex = 0, ColumnIndex = 1, RowSpan = 2, ColumnSpan = 2

 

 

마스터.디테일

   

 디테일.SetMaster( 마스터 ){

    마스터.Add_Detail( this);

    마스터.Command += delegate{

        

           // 각 명령들 반응.

 

    };

 }

 

 

 

스케쥴러

  

    작업 스케쥴러로 시작일 , 종료일을 그리드내에서 구간이 표시됨.

 

    - 작업내용 -----<  작업상세(SEQ)

 

 

 

 

웹사이트소스 빌드 후

-> 파일 선택

-> 배포대상 선택 -> 배포 ( 특정 폴더에 복사될 파일과 이력 생성됨 )

 

-> 웹 서버 열어서 붙여넣기

 

 

이전 굿센 같은 경우라면 이력배포와 동시에 할수 있게 됨..

 

 

'# 9) My Program(.NET)' 카테고리의 다른 글

디자이너] 추가 역변환  (0) 2013.07.03
디자이너] 8번을 뒤집어...  (0) 2013.07.02
Dev Tools [ Idea ]  (0) 2012.07.06
MyCodeGen ] 웁쓰... 망했다.  (0) 2011.09.05
MyCodeGen ] 그리드를 만들다!!!  (1) 2011.08.27

 

 

sp_helptext 를 하면 애써 맞춰놓은 정렬이 다 깨져 나와서

 

그리드가 아닌 text로 바꿔 실행해서 본다거나 해당 프로시져를 찾아서 수정 눌러서 본다거나...

 

귀찮아진다.

 

기존껀 긴건 짤린다 해서 = varchar( max )

 

sp_helptext를 수정하였음.

 

아래 파란색 글씨만 추가해서 새로 등록함.

 

 1.  스크립트 생성 [ SP_HELPTXT ]

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[SP_HELPTXT]    Script Date: 11/22/2012 11:55:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[SP_HELPTXT] 
 @objname nvarchar(776) 
   ,@columnname sysname = NULL 
as 
 
set nocount on 
 
declare @dbname sysname 
,@objid int 
,@BlankSpaceAdded   int 
,@BasePos       int 
,@CurrentPos    int 
,@TextLength    int 
,@LineId        int 
,@AddOnLen      int 
,@LFCR          int --lengths of line feed carriage return 
,@DefinedLength int 
 
/* NOTE: Length of @SyscomText is 4000 to replace the length of 
** text column in syscomments. 
** lengths on @Line, #CommentText Text column and 
** value for @DefinedLength are all 255. These need to all have 
** the same values. 255 was selected in order for the max length 
** display using down level clients 
*/ 
,@SyscomText nvarchar(4000) 
,@Line          nvarchar(255) 
 
select @DefinedLength = 255 
select @BlankSpaceAdded = 0 /*Keeps track of blank spaces at end of lines. Note Len function ignores 
                             trailing blank spaces*/ 
CREATE TABLE #CommentText 
(LineId int 
 ,Text  nvarchar(255) collate database_default) 
 
/* 
**  Make sure the @objname is local to the current database. 
*/ 
select @dbname = parsename(@objname,3) 
if @dbname is null 
 select @dbname = db_name() 
else if @dbname <> db_name() 
        begin 
                raiserror(15250,-1,-1) 
                return (1) 
        end 
 
/* 
**  See if @objname exists. 
*/ 
select @objid = object_id(@objname) 
if (@objid is null) 
        begin 
  raiserror(15009,-1,-1,@objname,@dbname) 
  return (1) 
        end 
 
-- If second parameter was given. 
if ( @columnname is not null) 
    begin 
        -- Check if it is a table 
        if (select count(*) from sys.objects where object_id = @objid and type in ('S ','U ','TF'))=0 
            begin 
                raiserror(15218,-1,-1,@objname) 
                return(1) 
            end 
        -- check if it is a correct column name 
        if ((select 'count'=count(*) from sys.columns where name = @columnname and object_id = @objid) =0) 
            begin 
                raiserror(15645,-1,-1,@columnname) 
                return(1) 
            end 
    if (ColumnProperty(@objid, @columnname, 'IsComputed') = 0) 
  begin 
   raiserror(15646,-1,-1,@columnname) 
   return(1) 
  end 
 
        declare ms_crs_syscom  CURSOR LOCAL 
        FOR select text from syscomments where id = @objid and encrypted = 0 and number = 
                        (select column_id from sys.columns where name = @columnname and object_id = @objid) 
                        order by number,colid 
        FOR READ ONLY 
 
    end 
else if @objid < 0 -- Handle system-objects 
 begin 
  -- Check count of rows with text data 
  if (select count(*) from master.sys.syscomments where id = @objid and text is not null) = 0 
   begin 
    raiserror(15197,-1,-1,@objname) 
    return (1) 
   end 
    
  declare ms_crs_syscom CURSOR LOCAL FOR select text from master.sys.syscomments where id = @objid 
   ORDER BY number, colid FOR READ ONLY 
 end 
else 
    begin 
        /* 
        **  Find out how many lines of text are coming back, 
        **  and return if there are none. 
        */ 
        if (select count(*) from syscomments c, sysobjects o where o.xtype not in ('S', 'U') 
            and o.id = c.id and o.id = @objid) = 0 
                begin 
                        raiserror(15197,-1,-1,@objname) 
                        return (1) 
                end 
 
        if (select count(*) from syscomments where id = @objid and encrypted = 0) = 0 
                begin 
                        raiserror(15471,-1,-1,@objname) 
                        return (0) 
                end 
 
  declare ms_crs_syscom  CURSOR LOCAL 
  FOR select text from syscomments where id = @objid and encrypted = 0 
    ORDER BY number, colid 
  FOR READ ONLY 
 
    end 
 
/* 
**  else get the text. 
*/ 
select @LFCR = 2 
select @LineId = 1 
 
 
OPEN ms_crs_syscom 
 
FETCH NEXT from ms_crs_syscom into @SyscomText 
 
WHILE @@fetch_status >= 0 
begin 
 
    select  @BasePos    = 1 
  select  @CurrentPos = 1 
    select  @TextLength = LEN(@SyscomText) 
 
    WHILE @CurrentPos  != 0 
    begin 
        --Looking for end of line followed by carriage return 
        select @CurrentPos =   CHARINDEX(char(13)+char(10), @SyscomText, @BasePos) 
 
        --If carriage return found 
        IF @CurrentPos != 0 
        begin 
            /*If new value for @Lines length will be > then the 
            **set length then insert current contents of @line 
            **and proceed. 
            */ 
            while (isnull(LEN(@Line),0) + @BlankSpaceAdded + @CurrentPos-@BasePos + @LFCR) > @DefinedLength 
            begin 
                select @AddOnLen = @DefinedLength-(isnull(LEN(@Line),0) + @BlankSpaceAdded) 
                INSERT #CommentText VALUES 
                ( @LineId, 
                  isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText, @BasePos, @AddOnLen), N'')) 
                select @Line = NULL, @LineId = @LineId + 1, 
                       @BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0 
            end 
            select @Line    = isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText, @BasePos, @CurrentPos-@BasePos + @LFCR), N'') 
            select @BasePos = @CurrentPos+2 
            INSERT #CommentText VALUES( @LineId, @Line ) 
            select @LineId = @LineId + 1 
            select @Line = NULL 
        end 
        else 
        --else carriage return not found 
        begin 
            IF @BasePos <= @TextLength 
            begin 
                /*If new value for @Lines length will be > then the 
                **defined length 
                */ 
                while (isnull(LEN(@Line),0) + @BlankSpaceAdded + @TextLength-@BasePos+1 ) > @DefinedLength 
                begin 
                    select @AddOnLen = @DefinedLength - (isnull(LEN(@Line),0) + @BlankSpaceAdded) 
                    INSERT #CommentText VALUES 
                    ( @LineId, 
                      isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText, @BasePos, @AddOnLen), N'')) 
                    select @Line = NULL, @LineId = @LineId + 1, 
                        @BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0 
                end 
                select @Line = isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText, @BasePos, @TextLength-@BasePos+1 ), N'') 
                if LEN(@Line) < @DefinedLength and charindex(' ', @SyscomText, @TextLength+1 ) > 0 
                begin 
                    select @Line = @Line + ' ', @BlankSpaceAdded = 1 
                end 
            end 
        end 
    end 
 
 FETCH NEXT from ms_crs_syscom into @SyscomText 
end 
 
IF @Line is NOT NULL 
    INSERT #CommentText VALUES( @LineId, @Line ) 

declare @lineNo int = 0;
declare @lineCnt int = 0;
declare @printtext varchar(max);
select @lineCnt = COUNT( LineId ) from #CommentText;
while( @lineNo < @lineCnt )
begin
 set @lineNo = @lineNo + 1;
 
 select @printtext = Text from #CommentText
 where LineId = @lineNo ;
 
 print( @printtext );
end
CLOSE  ms_crs_syscom 
DEALLOCATE  ms_crs_syscom 
 
DROP TABLE  #CommentText 
 
return (0) -- sp_helptext 

 

 

 

 

2. 프로시져를 시스템프로시져로 만든다.

USE [master]
GO
exec sp_ms_marksystemobject 'sp_helptxt'

 

3. 단축키에 등록해서 사용하면

 

print 되기때문에 탭유지되면서 잘 나온다 복사 해서 쓰면 됨.

 

 

 

 

오늘 두개의 데이타 베이스의 스키마 비교 쿼리를 만들다 보니..

 

한쪽은 있고 다른 한쪽은 없을 때를 위해 테이블을 복제를 자동화 하려고 했는데...

 

쿼리 한방에 안되네! 

 

  SELECT * INTO 대상DB.dbo.테이블명 FROM 소스DB.dbo.테이블명 where 1 = 2

 

하면 복제는 되는데 키가 복제가 안됨을 확인.

 

 그래서 만들었다. 우선 mssql 스튜디오에서 만들어지는 스크립트와 같이 만들어 보고

 

고정 타입은 아닌것 같은데 군데 군데 하드 코딩이 되있어서 전혀 다르게 동작 가능.

 

음.. ms-sql에서 사용하는 테이블 -> Create 스크립트 쿼리 같은걸 이용하는건 못찾았다.

 

 

declare @tableName nvarchar(775) =QUOTENAME( SCHEMA_NAME() )+'.'+ QUOTENAME(  테이블명  )
declare @Script varchar(max) = ''
declare @FKScript varchar(max) = ''
declare @ctrl varchar(2) = char(13)

declare @type1 varchar(100) = 'char, varchar'
declare @type2 varchar(100) = 'nchar, nvarchar '
declare @type3 varchar(100) = 'numeric,decimal'
 
set @Script = 'CREATE TABLE ' + @tableName + '(' + @ctrl

-- Columns
select @Script += ' '+ QUOTENAME( c.name ) + ' '+ QUOTENAME( TYPE_NAME( system_type_id ) )
  + case
    when CHARINDEX( TYPE_NAME(system_type_id), @type1 , 0) > 0 then '('+ case when c.max_length = -1 then

'max' else CAST( c.max_length as varchar(20) ) end +')'
    when CHARINDEX( TYPE_NAME(system_type_id), @type2 , 0) > 0 then '('+ case when c.max_length = -1 then

'max' else CAST( c.max_length/2 as varchar(20) ) end +')'
    when CHARINDEX( TYPE_NAME(system_type_id), @type3 , 0) > 0 then '('+ CAST( c.precision as varchar(20) )

+ ',' + CAST( c.scale as varchar(20) )+')'
    else '' end
  + ' '+  case when is_nullable = 1 then '' else 'NOT' end + ' NULL,' + @ctrl
from sys.tables t inner join sys.columns c
on  t.object_id = c.object_id
where t.object_id = OBJECT_ID( @tableName )

-- 콤마 제거
set @Script = left( @Script , datalength( @Script )-  datalength( @ctrl ) - datalength( ',') ) + @ctrl

-- Primary Key 생성
select @Script += ' CONSTRAINT ' + QUOTENAME( name ) + ' PRIMARY KEY CLUSTERED '+ @ctrl
from sys.key_constraints
where parent_object_id = object_id( @tableName ) and [TYPE] = 'PK'

select @Script += ' (' + @ctrl

select  @Script += '  '+ QUOTENAME( c.name )+ ' ASC,' + @ctrl
from sys.index_columns i inner join sys.key_constraints k
on  i.object_id = k.parent_object_id
inner join sys.columns c
on  i.object_id = c.object_id and i.column_id = c.column_id
inner join sys.indexes ii
on  i.object_id = ii.object_id and i.index_id = ii.index_id
where parent_object_id = object_id( @tableName ) and k.[TYPE] = 'PK'
 
-- 콤마 제거
set @Script = left( @Script , datalength( @Script )-  datalength( @ctrl ) - datalength( ',') ) + @ctrl
 
select @Script += ' ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' + @ctrl
select @Script += ') ON [PRIMARY]' + @ctrl
select @Script += 'GO' + @ctrl

-- Foreign Key 추가
select @FKScript += 'ALTER TABLE '+QUOTENAME( SCHEMA_NAME() )+'.'+ QUOTENAME( OBJECT_NAME( fkeyid )) + ' WITH CHECK ADD 

CONSTRAINT '+ QUOTENAME( OBJECT_NAME( constid ) ) + ' FOREIGN KEY ('+  QUOTENAME( cf.name ) + ')'+ @ctrl
  + 'REFERENCES '+QUOTENAME( SCHEMA_NAME() )+'.'+ QUOTENAME( OBJECT_NAME( rkeyid )) + ' ('+ QUOTENAME(

cr.name )+')'+ @ctrl
  + 'GO' + @ctrl + @ctrl
  + case when parent_object_id is null then 'ALTER TABLE '+QUOTENAME( SCHEMA_NAME() )+'.'+ QUOTENAME(

OBJECT_NAME( fkeyid )) + ' CHECK CONSTRAINT '+ QUOTENAME( OBJECT_NAME( constid ) ) + 'GO' + @ctrl + @ctrl else '' end
from sys.sysforeignkeys f
left
outer join sys.columns cf
on  f.fkeyid = cf.object_id and f.fkey = cf.column_id
left
outer join sys.columns cr
on  f.rkeyid = cr.object_id and f.rkey = cr.column_id

left    -- CHECK KEY < 참조키만 된 컬럼 >
outer join
(
 select  k.parent_object_id, i.column_id
 from sys.index_columns i inner join sys.key_constraints k
 on i.object_id = k.parent_object_id
 and i.object_id = OBJECT_ID( @tableName )     
) t
on  f.fkeyid  = t.parent_object_id  and f.fkey = t.column_id

where fkeyid = OBJECT_ID( @tableName )

 

print @Script
print @FKScript
  
   

 

클래스 다이어그램 일부 정리..

 

- 레이아웃 그리드는 작업중이라서 ... 패스~

 

 

# 락패턴..

 

 

# 그리드

# 툴바

# 컨텐츠 & 윈도우 & 탭컨테이너

 

 

 

 

 

대략적인 프레임 구성이 끝났다. 오래도 걸리네...  주말에만 작업을 하다보니... 겁나게 느리눼..

 

# 새로 만들어진 컨트롤

- 툴바컨테이너

- 락패턴

- 윈도우

- 컨텐츠

- 탭컨텐츠

- Source그리드를 이용한 JSFWGRID

 

1. Lock패턴을 이용해서 프로그램 시작

 

2. 인증이 완료되면 프로그램 메뉴가 로드됨. 

 

 

프로젝트 메뉴를 클릭하거나 단축키( Alt +P )를 입력시 아래 프로그램 실행.

 

 

3. 프로젝트 프로그램이 떴을때 프로젝트를 다시 클릭하면 프로젝트 관련 메뉴가 모두 올라온다.

아래 왼쪽은 메뉴, 메뉴를 클릭한것이 우측에 화면이 뜸.

 

 

4. 아래는 프로젝트 등록 창을 별로 띠웠을때...

 

 

3-1. 아래는 동일한 창에 메뉴 구성을 탭으로 만들어 구축한것임.

 

 

 

 

 

음 이렇게 나오넹...

 

전에 고딩때 돌고래수준이었는뎅...

 

문제 풀면서 뒤로가면서 아리 까리.. 한게 머리가 백지되는 느낌이 ... 있긴했는데

'--- 취미 > 생각하기' 카테고리의 다른 글

GUI Design Studio  (0) 2013.09.06
휴식] 멘붕? ...  (0) 2013.06.10
흠.. 덥다...  (0) 2012.07.29
ERP 개발이 드디어 2월 29일 종료되었다.  (0) 2012.03.02
계약? ... 왠지 모르게 찜찜해...  (0) 2011.08.08

 

# 패턴락? 이란걸로 불리는것 같음..

 

설정하게 되면 각 박스별로 랜덤한 숫자가 부여됨.

 

패턴을 그어 선택하고 설정을 하면!! 선택된 순서대로 저장됨.

 

이후 잠금상태(대기)에서 순서대로 패턴을 그어 ID의 일치여부를 확인함.

 

# 상태값 ( LOCK, UNLOCK, CONFIG )

 

각 상태값 별로 동작을 정의되었음.

 

훈스닷넷에 초기 컨셉 잡았던 소스를 올렸으나... 별반응은 없네..

 

선택만 넣어놔서 그런지...

 

>> 프로젝트 관리 프로그램의 시작 화면에 사용될 패턴임!!

 

> 설정!!

 

> 설정된 후 대기화면...

 

> 잘못 선택했을때 효과 ( 깜빡거리는데... 캡쳐가 안됨 )

 

> 잠금해제되었을때 ( 깜빡거리는데... 캡쳐안됨 )

 

 

 

 

------------------------------------------------  이전...

 

스마트 폰을 보면 패턴??

 

마우스 이동을 이용해서 락을 풀어주는 역할을 하는 이놈...

 

 

 

한번 만들어 봐야지 했던거라서... 만들었다..

 

 

 설정 시 다음 처럼 파란 원이 나타나며 설정을 하면 저장한다.

 

설정이 끝나면 다시 저장한 패턴에 맞춰 움직여주면 성공인지 실패인지 확인 가능.

 

=> 각 원별로 랜덤한 아이디가 설정시 부여되는데

 

이 값은 배치될때마다 원래 자리에 할당이 되고

 

이 값이 패턴에 대한 값이 일치하는지 확인하게 됨.

 

값이 다르면 패턴이 같아도 안풀림. ( 설정할때의 값으로 셋팅이 됨! )

 

 

'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글

PRJMNG] 클래스 관계...  (0) 2012.11.11
PRJMNG] 프로그램 프레임!!  (0) 2012.11.11
툴바 ] 리본바 흉내내기...  (0) 2012.10.23
PRJMNG] 구조  (0) 2012.10.09
PRJMNG] 구조  (0) 2012.08.13

 

 프로그램을 만들던 중 리본바를 쓸까하다가 라이센스가 어쩌고 저쩌고 말이 많아

 

내가 편하게 사용할 수 있는걸 만들었음.

 

 툴바의 기능은 모두 윈도우의 내부 컨텐츠에서 등록하게 되어있고 

 

 Window.Regist( IContent ); 로  컨텐츠를 윈도우에 등록하게된다

 

이때 컨텐츠에 구현된 기능들이 Window.Toolbar에 등록된다.

 

Window는 하나의 컨텐츠가 아닌 다수의 컨텐츠를 보유가능하고

 

선택 또한 가능하며, 선택될때마다 툴바는 다시 셋팅된다.

 

 

 -- 프로젝트 컨텐츠( 메뉴 컨텐츠와 동일한 윈도우 )

 

 

 

 -- 메뉴컨텐츠 ( 프로젝트 컨텐츠와 동일한 윈도우 )

 

 

 

 

 

 

일반 버튼만 추가 된 툴바 ( 중앙에 프로젝트, 닫기 버튼 적용 )

 

 

 

 

버튼 그룹이 추가된 툴바 ( 중앙에 프로젝트, 닫기 버튼 적용 )

 

 

 

 

 

탭이 추가된 툴바 (  중앙에 프로젝트, 닫기 버튼 적용 )

 

 

 

 

 

사용법 :

 

 일반 툴바

             //toolbar1.Regist(tl); //-- ok

 

       버튼 그룹 툴바

            //ToolGropBoxElement gb = new ToolGropBoxElement() { Text = "그룹1" };  //-- ok
            //gb.Regist(tl);
            //toolbar1.Regist(new ToolElementList() { { gb } });

 

       탭 툴바

            ToolTabControlElement tabctrl = new ToolTabControlElement();
            ToolTabPageElement tabpage = new ToolTabPageElement() { Text = "탭1" };
            tabpage.Regist(tl);
            tabctrl.Regist(new ToolElementList() { tabpage });
            toolbar1.Regist(new ToolElementList() { tabctrl });

 

     모두 ToolbarElement( 추상객체 ) 객체를 구현하여 만들어진다,

    툴바 내부 버튼도 동일하게 ToolBarElement( 추상객체 )를 구현한다.

 

  

 

 

'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글

PRJMNG] 프로그램 프레임!!  (0) 2012.11.11
PRJMNG] 패턴? 패널? 이름이 뭔가?? 이건  (0) 2012.10.24
PRJMNG] 구조  (0) 2012.10.09
PRJMNG] 구조  (0) 2012.08.13
PRJMNG] 프로젝트 등록화면  (0) 2012.08.13