Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

ListView Header 와 UpdateObjects 이벤트를 사용하는 방법은?


예언자

질문

델파이 11, Android

ListView DynamicAppearance 사용

ListView UpdateObjects를 사용하여 항목을 콘트롤하기를 원함

ListView Header 연결시 에러 발생( Item not found ) -패치이전에는 먹통이었음

Header 연결하지 않으면 정상작동합니다. 방법이 없을까요?

procedure TMainForm.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem);
var X: Integer;
begin
  (Sender as TListView).BeginUpdate;
  var TextItem:=AItem.Objects.DrawableByName('Text1') as TListItemText;
  if Assigned(TextItem) then
  begin
    TryStrToInt(AItem.Data['Text1'].ToString, X);
    if X=0 then TextItem.Text:='0'
    else TextItem.Text:=AItem.Data['Text1'].ToString+'만원';
  end;
  (Sender as TListView).EndUpdate;
end;

Edited by 예언자
선언을 잘못
이 댓글 링크
다른 사이트에 공유하기

2 answers to this question

Recommended Posts

  • 0

header와  Dynamic Appreance만 사용하실 때는 헤더 정보가 표시가 됩니다. 그러나 제시하신대로   ListView1UpdateObjects 이벤트를 같이 사용하면 item not found 오류가 발생합니다. 다음과 같이 이벤트를 수정하시면  header와 아이템 정보가 다 표시됩니다. 완성된 샘픙을 첨부하오니 참고하시기 바랍니다. ListViewDynamicBG (2).zip

if AItem.Purpose in [TListItemPurpose.Header, TListItemPurpose.Footer] then
 begin
    TextLabel := AItem.Objects.TextObject;
    TextLabel.TextShadowColor := TalphaColorRec.Null;
    TextLabel.Font.Style := [TFontStyle.fsBold, TFontStyle.fsItalic];
 end;

 if not (AItem.Purpose in [TListItemPurpose.Header, TListItemPurpose.Footer]) then
 begin
  TextItem := AItem.Objects.DrawableByName('Text2') as TListItemText;
  ImageItem := AItem.Objects.DrawableByName('Image2') as TListItemImage;

   if Assigned(ImageItem) then
   begin
      if AItem.Data['Text1'].ToString = '김현수' then
        ImageItem.Bitmap := ImageList1.Bitmap(TSizeF.Create(16, 16), 0)
      else
        ImageItem.Bitmap := ImageList1.Bitmap(TSizeF.Create(16, 16), 1);

      ImageItem.Visible := True;
   end;

   if Assigned(TextItem) then
   begin
     if Textitem.Text = '여자' then
       Textitem.Font.Style := [TFontStyle.fsBold, TFontStyle.fsItalic];
    end;
  end;
end;

[결과 이미지]

이미지 2.png

테스트 해보시고 결과를 댓글로 달아주시면 다른 분들에게도 도움이 될 것입니다 부탁드립니다. 

이 댓글 링크
다른 사이트에 공유하기

  • 0

[해결]

이제 헤더를 사용해도 에러없이 잘됩니다...

정말 감사합니다.

procedure TMainForm.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem);
var 
  X: Integer;
begin
  (Sender as TListView).BeginUpdate;
  if not (AItem.Purpose in [TListItemPurpose.Header, TListItemPurpose.Footer]) then
  begin
    var TextItem:=AItem.Objects.DrawableByName('Text1') as TListItemText;
    if Assigned(TextItem) then
    begin
      if not TryStrToInt(AItem.Data['Text1'].ToString, X) then X:=0;
      if X=0 then TextItem.Text:='0'
      else TextItem.Text:=AItem.Data['Text1'].ToString+'만원';
    end;
  end;
  (Sender as TListView).EndUpdate;
end;

Edited by 예언자
이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.