Q&A

  • Synchronize 에 대해서... 조언 좀 부탁합니다.
VCL를 사용하지 않고 Synchronize를 이용해서 아래의 내용을 처리하고자 합니다. 짧은 지식으로 아래 부분을 Synchronize로 처리하려 해도 워낙 초보라 어떻게 해야 할지 ....

고수님들의 조언을 좀 부탁드립니다.

procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
  // Command : String;
  FindItem, AddItem: TListItem;
var
  CommBlock: TCommBlock;
  RetrunStr: String;
begin
  if not AThread.Terminated and AThread.Connection.Connected then
  begin
    AThread.Connection.ReadBuffer(CommBlock, SizeOf (CommBlock));
    if (CommBlock.Command = 'Add') then
    begin
      MemoAdd.Lines.Add(CommBlock.SafemanID+'|'+CommBlock.IDNo);
    end else
    if (CommBlock.Command = 'Edit') then
    begin
      MemoAdd.Lines.Add(CommBlock.SafemanID+'|'+CommBlock.IDNo);
    end else
    if (CommBlock.Command = 'Del') then
    begin
      MemoDel.Lines.Add(CommBlock.SafemanID+'|'+CommBlock.IDNo);
    end else
    if (CommBlock.Command = 'LogOut') then
    begin
      FindItem := ListView.FindCaption(-1, CommBlock.UserID, False, False, False);
      if (FindItem <> nil) and (FindItem.SubItems[0] = CommBlock.ComName) then
      begin
        MsgAdd('LogOut: '+ CommBlock.UserID +'['+AThread.Connection.Socket.Binding.PeerIP+']');
        FindItem.Delete;
      end;
    end else
    if (CommBlock.Command = 'LogIn') then
    begin
      FindItem := ListView.FindCaption(-1, CommBlock.UserID, False, False, False);
      if FindItem = nil then
      begin
        MsgAdd('LogIn: '+ CommBlock.UserID +'['+AThread.Connection.Socket.Binding.PeerIP+']');
        RetrunStr := 'LogIn';
        ListView.Items.BeginUpdate;
        AddItem := ListView.Items.Add;
        AddItem.Caption := CommBlock.UserID;    // ID
        AddITem.SubItems.Add(CommBlock.ComName);       // Name
        AddITem.SubItems.Add(AThread.Connection.Socket.Binding.PeerIP); // IP
        AddITem.SubItems.Add(FormatDateTime('yyyy-mm-dd hh:nn:ss',Now)); // Time
        AddITem.SubItems.Add(IntToStr(AThread.Connection.Socket.Binding.Handle));
        ListView.Items.EndUpdate;
      end else
      begin
        if (FindItem.Caption     = CommBlock.UserID) and
           (FindItem.SubItems[0] = CommBlock.ComName) and
           (FindItem.SubItems[1] = AThread.Connection.Socket.Binding.PeerIP) then RetrunStr := 'LogIn' else
        begin
          MsgAdd('Using: '+ CommBlock.UserID +'['+AThread.Connection.Socket.Binding.PeerIP+']');
          RetrunStr := 'Using';
        end;
      end;
      CommBlock.Command   := RetrunStr;
      CommBlock.UserID    := '';
      CommBlock.SafemanID := '';
      CommBlock.IDNo      := '';
      AThread.Connection.WriteBuffer(CommBlock, SizeOf(CommBlock));
    end;
  end;
end;
0  COMMENTS
    • 유경민
      2008.09.27 09:24
      저랑 같은 사황인듯 ㅠ.ㅠ 저도 지금 죽을맛이에요 아무것도 모른상태에서 개발할려니 ㅋㅋ
    • 한상진
    • 2007.12.12 19:28
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2007.12.12 22:33
      안녕하세요. 윈도우에서 관련 API를 제공합니다. WNet으로 시작되는 API들인데요... WNetAddConne...
    • nilriri™
      2007.12.12 21:09
    • 한상진
      2007.12.13 01:09
      답변 올려주셔서 감사합니다... ㅎㅎ WNetAddConnection2를 써서 해결이 될듯해서 하고 있는데요;; WNetA...
    • ET
    • 2007.12.12 01:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 깨구락지
      2007.12.12 06:56
      ASCII 코드를 참고하십시오. http://www.delphi.co.kr/ascii.html
    • 용이...
    • 2007.12.11 20:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2007.12.11 20:31
      안녕하세요.. 3초짜리 타이머를 하나 만드시고 clientsocke.Active := True; Timer.Enabled := T...
    • 김승재
    • 2007.12.11 03:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2007.12.11 10:24
      인디 9 버전도 멀티 CPU에서 문제 없이 동작 합니다... 아무래도 다른 부분에서 놓치신것 같습니다.. 혹...
    • 이정욱
      2007.12.11 10:17
      아래의 소스를 보니 TCPExecute에서 리스트를 처리 하셨네요. 이 이벤트는 쓰레드 안에 있기 때문에, 쓰레...
    • 주정자
      2007.12.12 10:45
      이정욱님의 답변 감사합니다.  그러나, 제가 실력이 허접인지라 혹 가능하시면 간단한 예제를 들...
    • 혀노
    • 2007.12.10 22:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Crazy™
      2007.12.11 00:04
      group band를 한번 사용해보세요,. 음 그리고 애초에 QRCompositeReport 용도는 다중 레포트가 있는경우 ...
    • 주정자
    • 2007.12.10 22:00
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 주정자
    • 2007.12.10 06:36
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2007.12.11 10:21
      그냥 Active 만 True로 써주셔도 됩니다. 바인딩에서 뜻하는것은 해당 머쉰의 아이피가 여러개일때 그중...
    • 주정자
      2007.12.12 10:40
      11
    • 정해철
      2007.12.08 01:13
      http://www.delphi.co.kr/zboard/view.php?id=qanda&page=1&sn1=&divpage=13&sn=off&ss=on&sc=on&select_ar...
    • 정경철
      2007.12.08 05:25
      혹시 이것을 말하는지 모르겠습니다. 델파이에 ChartPreview(AForm, AChart) 가 있습니다. 도움말을 참고...
    • 박종철
      2007.12.10 18:12
      먼저 관심갖고 답변해 주셔서 감사합니다. 혹시나 저같은 고민을 하신 분들이 계실까봐 부족하지만 저...
    • 박종삼
    • 2007.12.07 23:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2007.12.08 00:07
      PSendBuff가 아마도 레코드형일것 같구요... 그중 sdBuff가 PChar나 Pointer형일것 같네요... 위 사항이...
    • 박종삼
      2007.12.08 23:50
    • 박종철
    • 2007.12.06 23:45
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Guest
      2007.12.07 01:08
      Chart1.Width := FormTest.Width / 2; <-- 이부분입니다. Chart1.Width 는 정수형인데 FormTest.Wi...
    • 박종철
      2007.12.07 01:32
      감사합니다. 알려주신 방법대로 div로 연산을 하니 일단 컴파일 할 때에는 오류메세지 없이 잘 넘어갑...
    • Crazy™
      2007.12.07 02:05
      div / 2 대신 trunc(FormTest.Width / 2) 로 해보시고 그래도 에러나시면 FormCreate대신 FormActive 이...
    • 박종철
      2007.12.07 17:59
      답변 주신 분들께 감사드립니다. FormActivate, Create, Resize 이벤트 어디에서도 계속 에러가 나서 ...
    • 정경철
    • 2007.12.06 19:42
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2007.12.06 22:51
      안녕하세요.. http://www.delphi.co.kr/zboard/view.php?id=qanda&page=1&sn1=&divpage=13&sn=off&ss=on...
    • 정경철
      2007.12.07 08:38
      위 링크 되어 있는 소스를 테스트 해 보면 모니터2에 표시됩니다. 버튼 같은것으로 폼을 열어 을때는정상...
    • 구창민
      2007.12.07 20:26
      음.. 테스트 해볼 방법이 없어 답변드리기가 곤란한데, 아래 코드에서 모니터2에 보여질 특정폼만 Left ...
    • 정경철
      2007.12.08 05:17
      위 소스대로 했습니다. 그런데 버튼으로 했을때에는 잘 됩니다. 그런데 메인폼이 열리때 하면 메인폼과 ...
    • 모영철
      2008.01.31 01:25
      Font의 캐릭터셋을 ShiftJIS 해주시면 됩니다.
    • Guest
      2007.12.06 02:30
      Group slices 를 사용해보세요. Style : Below % Value : 5 Label : 기타 이렇게 설정하면 전체에...
    • 박종철
      2007.12.06 17:32
      감사합니다~ 델파이 TChart에서는 어쩔수 없는 부분인가 봅니다. ^^;; 알려주신 방법으로 진행하려구요...
    • 코앤
    • 2007.12.05 19:48
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 정경철
    • 2007.12.05 17:22
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2007.12.05 19:23
      안녕하세요.. Panel을  런타임에 옮기시려면 아래 코드를 Panel 의 마우스다운 이벤트에 기술...
    • 정경철
      2007.12.06 20:00
      감사 합니다..