유돌이

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Notice

2011. 7. 19. 17:31 비법전수

블로그 광고를 어떻게 할까?? 고민하시는 분이 많을 겁니다. 이제 걱정은 그만!!

정말 쉬운 블로그 방법을 소개 할까 합니다.

 

우선 애드젯이란 사이트로 이동해 주세요!!!

 

(아래의 배너를 클릭하면 애드젯으로 이동 됩니다.)



 

 

 


 

위 사이트가 애드젯 입니다.

 

그럼 가입을 하셨다면 위 화면에 '애드젯 퍼가기'를 클릭해 주세요.

 

그리고 인기순에 카테고리에서 원하는 배너를 클릭해주세요.

 

그리면~ 아래와 같은 화면이 나옵니다.

 

밑에 [퍼가기] 보이시죠?? 걍 퍼가면  됩니다. ㅎㅎ

 

네이버는 위젯 설정이 바로 됩니다. ㅋ 참쉽죠잉???



아..그리고 프리미엄 스폰서 위젯이라는게 있는데요.

 

광고하고자 하는 블로그의 주소를 입력하고 승인요청을 하면 2~3일 이내에 광고가 걸립니다.

 

우선 블로그에 광고를 삽입해야 승인자격이 주어 집니다. 아...그리고 광고는 상단에 꼭 놓아 주세요.

 

그리고 프리미엄 스폰서는 중복으로 걸수 없습니다. 하나씩만 걸어주세요!! ㅎㅎ


 

자...이제 프리미엄 위젯가지 승인 나셧다면~ 광고풀을 늘려 보세요.

 

아시다 시피 블로그에 글을 많이 올리면 됩니다. ^^

 

이상 애드젯 광고수익에 관한 정보 였습니다. ㅋ

 

그럼 고수익을 향해 ㄱㄱㄱㄱ

(아래의 배너를 클릭하면 애드젯으로 이동 됩니다.)


'비법전수' 카테고리의 다른 글

2. Mythical Man-Month  (0) 2019.09.06
1. 프로젝트 예측  (0) 2019.09.06
TG삼보 스타2 리그가 개막 합니다.  (0) 2010.09.07
[네이트 이벤트] 실천해요! 초록절전생활.  (0) 2009.12.08
컴퓨터 성능 확인.  (0) 2009.05.26
posted by 유돌이
2009. 5. 26. 20:25 비법전수

시작-->실행-->dxdiag--> 확인(엔터)

 

실행하시면 다이렉트X 진단 도구 창으 뜨면서

 

컴퓨터 성능을 확인 하실 수 있습니다.

 

단, 다이렉트X가 설치되어 있어야 겟죠? ㅎㅎ

 

다이렉트X는 원도우 설치시 설치되시깐 사용하시는 O/S가

 

윈도우신 분들은 위와같이 확인  하실 수 있습니다.

 

그럼..


'비법전수' 카테고리의 다른 글

TG삼보 스타2 리그가 개막 합니다.  (0) 2010.09.07
[네이트 이벤트] 실천해요! 초록절전생활.  (0) 2009.12.08
컴퓨터 성능 확인  (0) 2009.05.19
형태소 분석기..  (0) 2009.01.05
MS툴 무료 제공 및 설치  (0) 2008.12.20
posted by 유돌이
2009. 5. 26. 20:24 델파이

뭐하는 함수냐 하면. 혹시 DB에서 Text를 읽어와 TMemo에 그대로 뿌려준다던가,
혹은 다른 상황에서 이상한문자(♬나 º - 비슷하지만 아님)가 나와서
고민하신분 있으신가요?

Memo1.Text := AdjustLineBreaks(문자열..);

검색해 봤는데 없어서 올려봅니다.

-----------------------------------------------------------------------------

- SysUtils에 선언된 명령어 및 설명 입니다.
{ AdjustLineBreaks adjusts all line breaks in the given string to the
indicated style.
When Style is tlbsCRLF, the function changes all
CR characters not followed by LF and all LF characters not preceded
by a CR into CR/LF pairs.
When Style is tlbsLF, the function changes all CR/LF pairs and CR characters
not followed by LF to LF characters. }

function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle =
{$IFDEF LINUX} tlbsLF {$ENDIF}
{$IFDEF MSWINDOWS} tlbsCRLF {$ENDIF}): string;

- 도움말 설명 입니다.
On Windows:
function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle = tlbsCRLF): string;
On Linux:
function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle = tlbsLF): string;

Description
AdjustLineBreaks returns a text string with its line breaks adjusted to fit a specified style.
S is the string to convert.
Style indicates whether line breaks should all be Windows-style line breaks with a carriage return and linefeed (tlbsCRLF), or Linux-style breaks with a single linefeed character (tlbsLF). If Style is omitted, the style for the compile target is used.

 

 

출처: 델마당. 무대뽀(kazankros) 님의 글


posted by 유돌이
2009. 5. 26. 20:24 델파이

uses
 
ActiveX, Shdocvw_tlb, MSHTML_TLB;

type
 
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; wParam: wParam;
    out pObject): HRESULT;
  stdcall;

function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
 
hInst: HWND;
  lRes: Cardinal;
  Msg: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
 
hInst := LoadLibrary('Oleacc.dll'); @ObjectFromLresult :=
    GetProcAddress(hInst, 'ObjectFromLresult');
  if @ObjectFromLresult <> nil then
  begin
    try
     
Msg := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
       
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp,
          IWebbrowser2, IE);
    finally
     
FreeLibrary(hInst);
    end;
  end;
end;

 

 

[※ 참고]

: 프레임의 경우엔 프레임의 인터페이스를 얻는 방법과 Shell Embedding 이란 클래스 핸들을 얻어서 다시 Shell DocObject View 클래스 핸들을 얻고, 다시 Internet Explorer_Server 핸들을 얻으면 됩니다. 그러니까 프레임은 Shell Embedding 클래스 안에 Shell DocObject View가 여러개 있는게 되죠...^^;

 

 

 

 

출처 : http://skyrack.tistory.com/45#recentTrackback 

사진찍는 나귀

posted by 유돌이
2009. 5. 26. 20:23 델파이

1. 필요 unit


엑셀로 인한 추가 unit 2개 : ComObj, OleCtrls


2. 변수 선언


var

     XL : variant ;

begin

    XL := CreateOLEObject('Excel.Application');     // OLE컨트롤 생성
    XL.DisplayAlerts := False;          //경고창 숨기기

    XL.WorkBooks.Add;                   //새화일 열기

    XL.SaveAs('C:\test.xls');         //다른이름 저장

    XL.quit;            //엑셀 언로드 ---> exception 구간에서 사용하기 ! 안사용하면 메모리누수


3. 생각해야 될것 기타 값 입력 모양 변경 등등은


엑셀에 보면 도구 - 메크로 - 메크로 기록이라는 항목이 있는데


거기서 기록 을 누른 후 행동을 하고 ㅁ 버튼을 눌러 메크로 기록을 중지하면


기록된 메크로를 볼 수 있는데 (alt + F11)  여기서 만들어진 메크로를 적용 시키면 된다.



3번이 가장 중요 ! 즉 메크로 기록을 한후 역추적을 통해 코딩 ㄱㄱ



===================================================================================

이하 코드를 통하여 참조하여 주시기 바랍니다. ㄳ

===================================================================================

unit Unit1;

interface

uses
//    엑셀로 인한 추가 unit 2개 : ComObj, OleCtrls
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, OleCtrls, Grids, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  Function  ReadExcelFile(sFileName:String):integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
    ReadExcelFile('12.xls');
end;

function TForm1.ReadExcelFile(sFileName: String): integer;
var
  XL, XArr, XTitle : Variant;
  sheetNumer,x,y : Integer;
  temp : String;
begin
  sheetNumer:=1;
  temp := 'a1:a1';
  try
    XL := CreateOLEObject('Excel.Application');
    XL.DisplayAlerts := False;          //경고창 보이기
    XL.workbooks.add;                   //새화일 열기
    XL.ActiveCell.FormulaR1C1 := '=3*3';
    XL.ActiveCell.CurrentRegion.Select;
    XL.selection.style:='Currency';
    XL.Cells[1,3].value := '3';

    XL.Range['D22'].Select;
    XL.ActiveCell.FormulaR1C1 := 'wonsama';
    XL.Selection.Font.ColorIndex := 3;


//   참조항목
//    XL.workbooks.Add('C:\test.xls');    //특정 이름의 화일 열기
//    XL.workbooks.Open('C:\'+sFileName); //특정 이름의 화일 열기
//    XL.ActiveWorkbook.saveas('C:\123.xls'); //활성화된 엑셀 다른 이름으로 저장
//    XL.ActiveCell.FormulaR1C1 := '=3*3';    //값입력
//    XL.ActiveCell.Font.Bold := True      //글자 환경 변경
//    XL.ActiveCell.CurrentRegion.Select;   //활성화 된 셀의 영역을 선택
//    XL.selection.style:='Currency';       //선택영역 통화 형태로

  except
    result:= 0;
    MessageDlg('Excel이 설치되어 있지 않습니다.'+#13+'이 기능을 이용하시려면 반드시 MS오피스 엑셀이 설치되어 있어야 합니다.- ' , MtWarning, [mbok], 0);
    XL.quit;            //엑셀 언로드
    Exit;
  end;
  XL.Visible := true;
  XL:= Unassigned;
 end;
end.

 

 

출처 :: Posted by 내멋대로 코딩 나비 (http://skql.tistory.com/tag/Delphi%20Excel)춉춉 

posted by 유돌이
2009. 5. 26. 20:22 델파이

델파이6 기준으로 TexcelApplication,
TExcelWorkbook, TExcelWorksheet, TexcelChart 올려놓고 실행하면 됩니다.

uses절에 Activex 추가하시고 다음과 같이 코딩하면 됩니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, excel2000, OleServer, Activex;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ExcelApplication1: TexcelApplication;
    ExcelWorkbook1: TexcelWorkbook;
    ExcelWorksheet1: TexcelWorksheet;
    ExcelChart1: TexcelChart;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  LCID,i : Integer;
  Sheet, Selection : Variant;
  Format : OleVariant;
  //차트용
  ChObj: ChartObject;
  SheetType: OleVariant;
  Rnge, ChType: OleVariant;
  Ax: Axis;
begin
  excelApplication1.Connect; //엑셀을 가동한다.(InVisible 상태)
  ExcelWorkbook1.connectto(excelApplication1.workbooks.add(TOleEnum(xlWBATWorksheet), LCID));
  ExcelWorksheet1.connectto(excelWorkbook1.worksheets.item['Sheet1'] as _worksheet );

  //워크시트 이름 변경
  excelWorksheet1.Name := '날 죽여라';
  excelApplication1.DisplayAlerts[LCID] := False;
  excelApplication1.Visible[LCID] := true;
  Sheet := ExcelApplication1.WorkBooks[ExcelApplication1.Workbooks.Count].WorkSheets[excelWorkbook1.Worksheets.Count];
  Sheet.Cells[1,1] := '엑셀서식';
  excelApplication1.Range['A1','A1'].borders.lineStyle := 1;
  excelApplication1.Range['A1','A1'].borders.Color := clNavy;
  excelApplication1.Range['A1','A1'].Interior.Color := clYellow;


  //폰트변경
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.bold := true;
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.Size := 20;
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].font.Name := '±A¼­';

  //우측정렬(가로정렬)
  excelApplication1.Range[Sheet.Cells[1,1],Sheet.Cells[1,1]].HorizontalAlignment := xlHAlignRight;


  //가운데정렬(세로정렬)
  excelApplication1.Range['B1','B1'].VerticalAlignment := xlHAlignCenter;

  //범위로 찍을 경우
  excelApplication1.Range['B1','C2'].Value := '123456789';

  //숫자형 포맷
  Format := '_-* #,##0.0_-;-* #,##0.0_-;_-* "-"???_-;_-@_-';

  '@'; //  테스트형식

  #,##0.0 // 숫자형식
  excelApplication1.Range['B1','B1'].NumberFormatLocal := Format;

  Sheet.Range['B2', 'C2'].Interior.Color := RGB(223, 123, 123);
  excelApplication1.Range['B4', 'C4'].Interior.Color := clSilver;

  //날짜 찍기
  Sheet.Cells[5,1] := '2002/5/6';
  Sheet.Cells[5,2] := '2002/5/6';

  //숫자형
  Sheet.Cells[5,3] := '12345';
  Sheet.Cells[5,4] := '12345';

  //날짜포맷
  Format := 'yyyy-mm-dd';
  excelWorksheet1.Range[Sheet.Cells[5,1], Sheet.Cells[5,1]].NumberFormat := Format;

  Format := 'mmmm d, yyyy';
  excelWorksheet1.Range[Sheet.Cells[5,2], Sheet.Cells[5,2]].NumberFormat := Format;

  // 스트링형으로 변경
  Format := '@';
  excelWorksheet1.Range[Sheet.Cells[5,3], Sheet.Cells[5,3]].NumberFormat := Format;

  excelWorksheet1.Range['B11','B11'].VerticalAlignment := xlHAlignCenter;
  excelWorksheet1.Range['B11','B11'].HorizontalAlignment := xlHAlignRight;
  excelWorksheet1.Range['B11','B11'].Value := '셀병합후 가운데(세로) 정렬';
  excelWorksheet1.Range['B11','B13'].MergeCells := true;
  excelWorksheet1.Range['B11','B13'].borders.LineStyle := 2;

  excelWorksheet1.Range['B15','B15'].borders.lineStyle := 0;
  excelWorksheet1.Range['B15','B15'].HorizontalAlignment := xlHAlignRight;
  excelWorksheet1.Range['B15','B15'].Value := '셀병합후 우측(가로) 정렬';
  excelWorksheet1.Range['B15','D15'].MergeCells := true;
  excelWorksheet1.Range['B15','D15'].borders.LineStyle := 1;

  excelWorksheet1.Range['F15','G20'].MergeCells := true;
  excelWorksheet1.Range['F15','F15'].Value := '다중셀병합';
  excelWorksheet1.Range['F15','G20'].MergeCells := true;
  excelWorksheet1.Range['F15','F15'].HorizontalAlignment := xlHAlignCenter;
  excelWorksheet1.Range['F15','F15'].VerticalAlignment   := xlHAlignCenter;
  excelWorksheet1.Range['F15','G20'].borders.Weight := 4;

  //라인 스타일
  for i := 0 to 13 do
  begin
    excelWorksheet1.Range['B'+inttostr((2*i)+16),'B'+inttostr((2*i)+16)].borders.lineStyle := i;
    excelWorksheet1.Range['B'+inttostr((2*i)+16),'B'+inttostr((2*i)+16)].Value := 'borders.lineStyle := '+inttostr(i);
  end;

  //border Weight
  for i := 1 to 4 do
  begin
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].borders.lineStyle := 1;
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].borders.Weight := 1;
    excelWorksheet1.Range['B'+inttostr((2*i)+42),'B'+inttostr((2*i)+42)].Value := 'borders.Weight := '+inttostr(i);
  end;

  //라인 위치
  excelWorksheet1.Range['D18','D18'].borders.Item[1].LineStyle := 1;
  excelWorksheet1.Range['D18','D18'].Value := 'borders.Item[1].LineStyle := 1';
  excelWorksheet1.Range['D20','D20'].borders.Item[2].LineStyle := 1;
  excelWorksheet1.Range['D20','D20'].Value := 'borders.Item[2].LineStyle := 1';
  excelWorksheet1.Range['D22','D22'].borders.Item[3].LineStyle := 1;
  excelWorksheet1.Range['D22','D22'].Value := 'borders.Item[3].LineStyle := 1';
  excelWorksheet1.Range['D24','D24'].borders.Item[4].LineStyle := 1;
  excelWorksheet1.Range['D24','D24'].Value := 'borders.Item[4].LineStyle := 1';

  //패턴 변경
  for i := 1 to 18 do
  begin
    excelWorksheet1.Range['D'+inttostr(i+24),'D'+inttostr(i+24)].Interior.Pattern := i;
    excelWorksheet1.Range['E'+inttostr(i+24),'E'+inttostr(i+24)].Value := 'Interior.Pattern := '+inttostr(i);
  end;

{ 이미지를 삽입할 경우 실제파일을 기록해야 되기 때문에 주석처리
  실제 파일과 경로명 기록하고 주석푸시고 싱행해보세요
  //백그라운드 이미지
  //excelWorksheet1.SetBackgroundPicture('C:\My Documents\My Pictures\couplevssolo(6).jpg');


  //이미지 입력
  Selection := Sheet.Pictures.Insert('C:\My Documents\My Pictures\302492_2.jpg');


  //이미지 위치 조절
  Selection.ShapeRange.IncrementLeft(243);
  Selection.ShapeRange.IncrementTop(605);
}

  //수식 입력
  Format := '#,##0.00_ ;-#,##0.00;_-* "-"???_-;_-@_-';
  excelApplication1.Range['F3','H8'].NumberFormatLocal := Format;

  excelWorksheet1.Range['F3', 'H8'].Formula := '=RAND()*10';
  excelWorksheet1.Range['F9', 'F9'].Formula := '=SUM(F3:F8)';
  excelWorksheet1.Range['G9', 'G9'].Formula := '=SUM(G3:G8)';
  excelWorksheet1.Range['H9', 'H9'].Formula := '=SUM(H3:H8)';
  excelWorksheet1.Range['I9', 'I9'].Formula := '=SUM(F9:H9)';


  excelWorksheet1.Range['F2', 'F2'].Value := '1학년';
  excelWorksheet1.Range['G2', 'G2'].Value := '2학년';
  excelWorksheet1.Range['H2', 'H2'].Value := '3학년';

  excelWorksheet1.Range['E3', 'E3'].Value := '1년';
  excelWorksheet1.Range['E4', 'E4'].Value := '2년';
  excelWorksheet1.Range['E5', 'E5'].Value := '3년';
  excelWorksheet1.Range['E6', 'E6'].Value := '4년';
  excelWorksheet1.Range['E7', 'E7'].Value := '5년';
  excelWorksheet1.Range['E8', 'E8'].Value := '6년';
  excelWorksheet1.Range['E3', 'E8'].HorizontalAlignment := xlHAlignRight;

  //차트용 오브젝트 생성
  ChObj := (excelWorksheet1.ChartObjects(EmptyParam, lcid) as ChartObjects).Add(600, 10, 400, 250);
  excelChart1.ConnectTo(ChObj.Chart as _Chart);


  //데이터 범위(데이터뿐만 아니라 가로축 세로축에 찍힐 주석값까지 포함)
  Rnge := excelWorksheet1.Range['E2','H8']; // the data range, including titles


  //차트타입
  ChType := TOleEnum(xl3DColumn);
  excelChart1.ChartWizard(Rnge, ChType, EmptyParam, xlColumns, 1, 1, True,
                          excelWorksheet1.Range['A1', 'A1'].Text, // The chart title
                          '번호', '점수', EmptyParam, lcid);
  Ax := excelChart1.Axes(xlValue, xlPrimary, lcid) as Axis;
  Ax.AxisTitle.Font.FontStyle := '굴림체';

  //자동 컬럼 폭 맞춤
excelWorksheet1.Range[ XL.Cells[1, 1], XL.Cells[ir, 9]].Select;

excelWorksheet1.Columns.AutoFit;
end;

end

 

 

 

출처 :: Posted by 내멋대로 코딩 나비 (http://skql.tistory.com/tag/Delphi%20Excel)

posted by 유돌이
2009. 5. 19. 21:03 비법전수

시작-->실행-->dxdiag--> 확인(엔터)

 

실행하시면 다이렉트X 진단 도구 창으 뜨면서

 

컴퓨터 성능을 확인 하실 수 있습니다.

 

단, 다이렉트X가 설치되어 있어야 겟죠? ㅎㅎ

 

다이렉트X는 원도우 설치시 설치되시깐 사용하시는 O/S가

 

윈도우신 분들은 위와같이 확인  하실 수 있습니다.

 

그럼..

'비법전수' 카테고리의 다른 글

[네이트 이벤트] 실천해요! 초록절전생활.  (0) 2009.12.08
컴퓨터 성능 확인.  (0) 2009.05.26
형태소 분석기..  (0) 2009.01.05
MS툴 무료 제공 및 설치  (0) 2008.12.20
sticky tag를 제거 방법.  (0) 2008.12.20
posted by 유돌이
2009. 2. 9. 21:40 C/C++/MFC
미 아시겠지만, 세션에는 ASP.NET에는 3가지의 세션 모드를 지원하고 있습니다. 
 
1) InPro방식 , 2) StateServer방식, 3) SQLServer방식  
  1. 세션 저장방식 
    1) 웹서버의 메모리에 저장된다. 
     
    2) 분리된 프로세스(aspnet_state.exe)의 메모리에 serialize된 형태로 저장된다. 분리된 서버에 저장이 가능하다. 
     
    3) serialize된 형태로 SQL서버에 저장된다. 
     
  2. 성능 
    1) 속도가 가장 빠르다. 세션저장소가 웹서버의 메모리이므로 저장량이 많아질 경우 웹서버 처리속도에 영향을 미칠 수 있다. 
     
    2) 기본형식의 데이타(string, integer등)인 경우 기준으로 15%의 속도저하가 있다고 알려짐.  
    그렇지만, 일반 object를 저장할 경우, serialize/deserialize과정을 거쳐야 하므로 성능은 더욱 저하될 수 있다. 
     
    3) 기본형식의 데이타인 경우 기준으로 25%의 속도저하가 있다고 알려짐. 
    stateServer방식과 마찬가지로, 일반 object를 저장할 경우, serialize/deserialize과정을 거쳐야 하므로 성능은 더욱 저하됨. 
     
  3. 문제점 
    1) aspnet_wp 프로세스가 재기동(recycle)되면 세션상태가 사라짐(SP2: 비정상적 recycle을 해결함).  
    어플리케이션을 다시 시작해도 세션사라짐.  
    이유는 어플리케이션의 메모리영역에 세션을 저장하기 때문에, 어플리케이션이 재시작하면 메모리영역을 다시 할당받기 때문이다. 
     
    어플리케이션을 재시작되는 되는 사항 
     
           가) config파일의 수정(web.config, machine.config, global.asax등) 
           나) \bin 디렉토리 밑의 파일 수정(즉 컴파일을 새로 하게되면 세션 사라지는 큰 문제점이 있음) 
     
    2) Inproc방식의 세션사라지는 문제를 해결함. WebFarm환경에서 특정서버에 세션을 저장하게 하는 것을 가능하게 함. 
    그렇지만, 세션서버의 장애발생시 모든 웹서버의 세션이 작동안하는 문제점이 있음. 
     
    3) Inproc방식의 세션사라지는 문제를 해결함. SQL서버가 재기동되어도 세션 사라지지 않음. 
    또한 SQL서버의 클러스터링을 이용하면, 특정 SQL서버의 장애시에도 서비스 가능함. 
     
  4. 유의사항 
    1) Web Garden mode에선 제대로 동작안함.(주: Web Garden이란 프로세서(CPU) 독립적으로 aspnet_wp.exe가 실행됨) 
    WebGarden을 사용하려면, StateServer나 SQLSERVER로 바꾸어야 함. 
    Session_End 이벤트는 Inproc 모드에서만 동작한다. 
     
    2) Web Farm방식에서는 모든 웹서버들은 같은 machineKey를 가져야 한다. 
    또한 저장되는 객체가 serializable하는지 확인해야 한다. 
    Web Farm방식에서 다른 서버로 세션이 전달되기 위해서는 어플리케이션의 경로가 같아야 한다. 
     
    3) 저장되는 객체가 serializable하는지 확인해야 한다. 
    Web Farm방식에서 다른 서버로 세션이 전달되기 위해서는 어플리케이션의 경로가 같아야 한다. 
     
  5. 자주 묻는 질문 
    1) ASP와 ASP.NET의 세션을 공유할 수 있는지요..? 
    - 불가능합니다. 
     
    2) 서로 다른 웹어플리케이션 사이에 세션을 공유할 수 있는지요.. 
    - 불가능합니다. 
     
    3) Inproc방식에서 왜 가끔 세션값이 사라지나요? 
    - 어플리케이션의 recycle때문입니다. SP2에서 Fix 되었습니다. 
     
    4) 어떤 종류의 객체가 세션에 저장될 수 있나? 
    - 세션저장 방식에 따라 달라집니다. 
     
    Inproc방식에서는 어떤 객체라도 저장할 수 있으나,  
    StateServer와 SQLServer방식에서는 serializable한 객체만 저장될 수 있습니다. 
    사용자가 직접 만드는 클래스인 경우 serializable속성을 추가함으로써 저장이 가능하나,  
    제공되는 클래스인 경우 Object명.GetType.IsSerializable() 로써 알아볼 수는 있으나,  
    변경은 불가능한 것 같습니다. (확실하진 않습니다). 
     
    5) Serializable은 어떻게 지정하나? 
    - C# 
    [Serializable]  
    public class MyClass  
    {  
           //class code  
    }  
     
    - VB.NET 
    <Serializable()> _  
    Public Class MyClass  
           'Class code  
    End Class 
posted by 유돌이
2009. 2. 9. 21:37 C/C++/MFC
윈도우제목과 윈도우클래스명으로 윈도우핸들 찾기!

연결파일 : user32.dll
함수 :
   실수함수: FindWindowA(문자: 클래스명, 윈도우제목);
예제 : [클래스명이 'TNHForm'이고, 창 제목이 '창0'인 창을 찾습니다.]
   핸들 := 사용자함수0.FindWindowA("TNHForm", "창0");
주의 :
   만일 클래스명 및 윈도우제목도 같은 프로그램이 있다면 난감합니다;
참고 :
   더 상세한 함수를 원하신다면 FindWindowExA 를 참고해주세요.


윈도우제목과 윈도우클래스명으로 윈도우핸들 찾기[고급]!

연결파일 : user32.dll
함수 :
   실수함수: FindWindowExA(실수: 부모창, 다음창; 문자: 클래스명, 윈도우제목);
설명 :
   부모창 - 부모창의 핸들에서 자식 객체를 찾습니다. 사용 안할경우 0을 넣으시면 됩니다.
   다음창 - 여기에 특정 창의 핸들을 넣으시면 그 특정창 다음부터 창을 찾습니다.
               [동일한 클래스명과 제목명이 여러개 있을경우 편리합니다.]
               역시 사용안하시려면 0 을 넣으시면 됩니다.
   클래스명과 윈도우제목은 FindWindowA 와 동일합니다.
예제 : [클래스명이 'TNHForm'이고, 창 제목이 '창0'인 창을 찾습니다.]
   핸들 := 사용자함수0.FindWindowA(0, 0, "TNHForm", "창0");


특정 좌표에 있는 윈도우의 핸들찾기!

연결파일 : user32.dll
함수 :
   실수함수: WindowFromPoint(실수: X, Y);
예제 : [X좌표 200 Y좌표 300에 위치한 창의 핸들을 얻습니다.]
   핸들 := 사용자함수0.WindowFromPoint(200, 300);


현재 활성화된 창의 핸들 찾기!
연결파일 : user32.dll
함수 :
   실수함수: GetActiveWindow;
예제 :
   핸들 := 사용자함수0.GetActiveWindow;


현재 포커스[초점]이 있는 윈도우의 핸들찾기!

연결파일 : user32.dll
함수 :
   실수함수: GetFocus;
예제 :
   핸들 := 사용자함수0.GetFocus;


가장 앞에있는 창의 윈도우핸들 찾기!

연결파일 : user32.dll
함수 :
   실수함수: GetForegroundWindow;
예제 :
   핸들 := 사용자함수0.GetForegroundWindow;



그외, 함수를 구하는 방법에는 여러가지가 있습니다.
다음창의 핸들구하기, 이전창의 핸들구하기
부모창의핸들 구하기, 데스크탑윈도우 핸들구하기
가장 처음창의 핸들구하기, 가장 마지막창의 핸들구하기
소유 윈도우의 핸들구하기 등등..


여러가지 방법등이 있지만, 가장 많이쓰는 것들을 소개해봤습니다.

Tip & 팁!)
   가장 고질병인 ㅎ밑판등의 핸들 구하기!..
   밑판의 핸들구하려고, 창조웹브라우저의 함수를 사용하거나, 여러가지 방법으로 어렵게
   핸들속성이 없는 객체의 핸들을 구하셨나요?-_-;

   ㅎ밑판의 핸들구하기!.. :
       밑판0.활성화해;
       핸들 := 사용자함수0.GetFocus;

'C/C++/MFC' 카테고리의 다른 글

PostQuitMessage  (0) 2009.02.09
ExitProcess(), TerminateProcess(), PostQuitMessage() 차이점  (0) 2009.02.09
트레이로 가는 애니메이션 출력하기  (0) 2009.02.09
string::find와 string::npos 란?  (0) 2009.02.09
DoModal() 이란??  (0) 2009.01.14
posted by 유돌이
prev 1 next