سؤال

ولدي خط واحد CEikLabel في طلبي التي تحتاج إلى تمرير النص.

والحل بسيط هو أن يتبادر إلى الذهن (ولكن ربما ساذجة) سيكون شيء من هذا القبيل ..

[begin pseduo code]

 on timer.fire {
  set slightly shifted text in label
  redraw label
 }
 start timer

[end pseudo code]
<ع> استخدام فئة CPeriodic كما الموقت وlabel.DrawDeferred () على كل تحديث.

هل تعتقد أن هذا هو أفضل وسيلة، قد يكون غير فعال وليس إعادة رسم التسمية مرتين أو ثلاث مرات في الثانية .. ولكن هل هناك أي طريقة أخرى؟

والشكر:)

هل كانت مفيدة؟

المحلول

ورأيت حل مؤقت على أساس استخدامها لتمرير أسماء العناصر في مربعات سرد.

وهناك بضعة أشياء لمشاهدة لهي أنه يمكن أن تومض قليلا أثناء التمرير والتي تحتاج للتأكد من أن النص الذي وضع على التسمية ليست طويلة جدا، وإلا فإنه سوف مقطع تلقائيا سلسلة وإضافة إلى elipsis (...)

استخدم TextUtils::ClipToFit للحصول على سلسلة الذي يناسب على التسمية وإزالة elipsis يضيف قبل وضع النص على التسمية (البحث عن KTextUtilClipEndChar في سلسلة الخاص بك قص). سوف تحتاج إلى العمل على كيفية العديد من الشخصيات لتخطي في بداية السلسلة قبل تمريرها إلى وظيفة كليب.

نصائح أخرى

وأنا لا أعرف ما إذا كان هناك طريقة أخرى للقيام بذلك ولا أستطيع أن أقول ما إذا كان نهج لديك في عقلك سيكون غير فعال. ومع ذلك، قد ترغب في إلقاء نظرة على هذا الموضوع الذي يناقش حد كبير نفس السؤال الذي تملكه وأيضا يذكر لفترة وجيزة إلى حد ما نفس الحل كما واحدة لديك تصور.

ولقد فعلت مثل هذا

TTimeIntervalMicroSeconds32 scrolltime(70000);
iPeriodicScroll = CPeriodic::NewL(CActive::EPriorityIdle);
iPeriodicScroll->Start(scrolltime, scrolltime, TCallBack(CVisTagContainerView::ScrollTextL, this));

وثم في وظيفة المتكررة

CEikLabel *label = iContainer->Label();
const TDesC16 *temp = label->Text();
if (temp->Length() <= 0) { 
    if (iTextState != ETextIdle) { return; }
    DownloadMoreTextL();
    return;
}
TPtrC16 right = temp->Right(temp->Length()-1);
label->SetTextL(right);
label->DrawDeferred();

وهكذا يتحرك النص من اليمين إلى اليسار، وعندما ذهب كل شيء، وإسكانها التسمية التي DownloadMoreTextL

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top