2018년 2월 8일 목요일

CentOS7 CodeTyphon 6.30 Install Fail

Error MSG : CXXABI_1.3.8 not found

아래 사이트에서 p7zip rpm install 한다.

https://centos.pkgs.org/7/epel-x86_64/p7zip-16.02-2.el7.x86_64.rpm.html

rpm -Uvh p7zip-xxx.xxx.rpm

Install Success!!!!!!!


2014년 12월 3일 수요일

WIn7 Codetyphon 5.1 install / uninstall Administrator Privileges problem


Codetyphon install / uninstall Administrator Privileges problem



1. check Server Service run
    - Window Key + R
    - services.msc execute
    - Server Service run

2. continue install or uninstall




end.... :)

2014년 3월 19일 수요일

[Lazarus] Linux Console Application에서 Timer 사용하기


uses
  ...., fptimer;



FTimer : TFPTimer;



...
...
..


FTimer := TFPTimer.Create;

FTimer.Interval := 1000;
FTimer.OnTimer := @OnTimer;
FTimer.Enabled := true;

..
..


Good!!!! Lazarus!!


2013년 6월 11일 화요일

선택한 폴더 경로가 하위 폴더에 포함되는지 여부


선택한 폴더가 하위 폴더에 포함 되는지 여부....


function DirectoryPos(sOldPath, sNewPath: string): boolean;
var
  oStr1, oStr2 : TStrings;
  I: Integer;
  J: Integer;
  bFlag: boolean;
begin

  oStr1 := TStringList.Create;
  oStr2 := TStringList.Create;
  bFlag := false;
  try
    oStr1.StrictDelimiter := true;
    oStr2.StrictDelimiter := true;
    oStr1.Delimiter := '\';
    oStr2.Delimiter := '\';
    oStr1.DelimitedText := FsFirstSelect;
    oStr2.DelimitedText := FsSecondSelect;
    for I := 0 to oStr1.Count - 1 do begin
    if I > oStr2.Count -1 then begin
      bFlag := false;
        break;
      end;
      if oStr1[i] = oStr2[i] then begin
// 같으면 동일한 위치
        bFlag := true;
        continue;
      end else begin
        // 다르면 다른 위치
        bFlag := false;
        break;
      end;
    end;
    result := bFlag;
  finally
    oStr1.Free;
    oStr2.Free;
  end;

end;

2013년 1월 16일 수요일

Embedded webbrowser don't closed

Embedded webbrowser don't closed


아래와 같이 WindowClosing 이벤트에 Cancel값을 항상 True로 주면 창이 닫히는 Tag를 타지 않음.


procedure TForm1.EmbeddedWB1WindowClosing(ASender: TObject;
  IsChildWindow: WordBool; var Cancel: WordBool);
begin
  cancel := true;
end; 


2012년 8월 20일 월요일

GettickCount64



흔히 서버어플을 만들다 보면 GettickCount를 사용하는 코드들이 있는데

장시간 운영중인 운영체제에서는 해당함수가 -1을 리턴하는경우가 있다.

Delphi2010은 Cardinal 값으로 반환 받는데 cardinal이라면 약 49 일이후에는 GettickCount가

엉뚱한 값을 내뱉는 경우가 발생하여 코드에 따라 예기치 않은 동작을 보이거나 심지어

Access Violation까지 뱉어내기도 한다.



아래 코드를 이용하면 GetTickCount64 함수를 이용할 수 있는데

무려 약 2억9천2백4십7만천2백8년째 가동중인것까지 사용이 가능하다.



출처 : http://www.delphipraxis.net/711170-post5.html

Unit GTCUnit;
// (c) 1997-2007 by FNS Enterprize's (FNSE.de)
// 2003-2007 by himitsu @ Delphi-PRAXiS.de

Interface

Uses Windows;

Var GetTickCount64: Function(): UInt64; StdCall;

Implementation

Function _GetTickCount64: UInt64; StdCall;
Var Freq, Ticks: UInt64;
Begin

  If QueryPerformanceFrequency(Int64(Freq))
     and QueryPerformanceCounter(Int64(Ticks))
     and (Int64(Freq) > 0) Then Begin

    If Ticks >= UInt64(-1) div 1000 Then Result := Ticks div (Freq div 1000)
    Else Result := (Ticks * 1000) div Freq;
    End Else Result := 0;
End;

Initialization
  GetTickCount64 := GetProcAddress(GetModuleHandle('Kernel32.dll'), 'GetTickCount64');
  If @GetTickCount64 = nil Then GetTickCount64 := @_GetTickCount64;
End.


사용예

Uses Windows, GTCUnit;
.....
....

Var C, C2: UInt64;
Begin

C := GetTickCount64();
Sleep(3000);
C2 := GetTickCount64();
Label1.Caption := IntToStr(C2 - C);

End;


2012년 5월 23일 수요일

VirtualstringTree CheckState



VirtualStringTree의 체크 박스를 강제로 체크 되도록 하려면 아래와 같이 하면 된다.
키포인트는
 TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := csUncheckedNormal;
위와 같이 해야 정상적으로 체크 및 언체크 된다.


var
  oHitInfo : THitInfo;

  nTmp1 : TCheckState;
  bTmp1 : boolean;
begin

  if button <> mbLeft then exit;


  TVirtualStringTree(Sender).GetHitTestInfoAt(x-TVirtualStringTree(Sender).OffsetXY.X
                                          ,y - TVirtualStringTree(Sender).OffsetXY.Y,false,oHitInfo);
  if oHitInfo.HitNode = nil then exit;
  if oHitInfo.HitColumn = 0 then exit;

//  vstBookMarkChecking(Sender: TBaseVirtualTree;
//  Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean);

  bTmp1 := true;

  if oHitInfo.HitNode.CheckState = csCheckedNormal then begin
    nTmp1 := csUncheckedNormal;
    //oHitInfo.HitNode.CheckState := nTmp1;
    TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := csUncheckedNormal;



    TVirtualStringTree(Sender).InvalidateNode(oHitInfo.HitNode);
    TVirtualStringTree(Sender).RepaintNode(oHitInfo.HitNode);
  end else begin
    nTmp1 := cscheckedNormal;
    //oHitInfo.HitNode.CheckState := nTmp1;

    TVirtualStringTree(Sender).CheckState[oHitInfo.HitNode] := cscheckedNormal;
    TVirtualStringTree(Sender).InvalidateNode(oHitInfo.HitNode);
    TVirtualStringTree(Sender).RepaintNode(oHitInfo.HitNode);
  end;