Sto tentando di visualizzare notizie da un RSS in una casella di riepilogo utilizzando il seguente formato, come mostrato nell'immagine seguente. L'applicazione sullo screenshot è stata sviluppata in firemonkey disegnando la listbox. Devo visualizzare lo stesso nella mia applicazione VCL.Il testo Unicode nella tela della casella di riepilogo è troppo lento
Le disposizioni della presente disposizione sono:
- Il titolo notizia dovrebbe essere il testo in grassetto
- La descrizione breve dovrebbe essere collocato in basso e dovrebbe essere confezionati se doesn' t adattarsi in una singola riga (come mostrato nell'immagine); font-style dovrebbe essere normale
- Ci dovrebbe essere un'immagine per ogni notizia
Il mio codice finora:
procedure TfrmDatePicker.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
R: TRect;
begin
ListBox1.Canvas.Font.Color := clBlack;
ListBox1.Canvas.Font.Style := [fsBold];
ListBox1.Canvas.Font.Size := 9;
if Odd(Index) then ListBox1.Canvas.Brush.Color := clWhite
else ListBox1.Canvas.Brush.Color := clBtnFace;
ListBox1.Canvas.FillRect (Rect);
ListBox1.Canvas.Pen.Color := clHighlight;
if(odSelected in State) then
begin
ListBox1.Canvas.Font.Color := clHighlightText;
ListBox1.Canvas.Brush.Color := clHighlight;
ListBox1.Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
if(odFocused in State) then DrawFocusRect(ListBox1.Canvas.Handle, Rect);
end;
ImageList1.Draw(ListBox1.Canvas, Rect.Left + 2,
Rect.top + (ListBox1.ItemHeight - ImageList1.Height) div 2, Index, true);
ListBox1.Canvas.TextOut(Rect.Left + 70, Rect.Top + 4, 'कान्तिपुर समाचारआजकोपत्रिकामाकेहिछैन');
ListBox1.Canvas.Font.Style := ListBox1.Canvas.Font.Style - [fsBold];
R := Rect;
R.Left := R.Left + 70;
R.Top := R.Top + 32;
R.Height := 30;
DrawText(ListBox1.Canvas.Handle, PChar(ss), Length(ss), R, DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
ListBox1.Canvas.TextOut(Rect.Right - 80, Rect.top + 4, '5 mins ago');
end;
Ecco l'output sto ottenendo:
Problema
Il disegno del testo Unicode è troppo lento e sfarfallio quando la casella di riepilogo scorre o il modulo viene ridimensionato.
Nota
- Il carattere è stata impostata a @microsoft neogotico
- itemHeight = 70; style = ownerdrawfixed
- Non c'è alcun problema nel disegnare lo stesso testo unicode nell'applicazione firemonkey pubblicata nel primo screenshot.
- Il codice pubblicato sopra funziona piuttosto bene per il normale testo inglese e non c'è affatto sfarfallio. Il problema esiste solo per il testo Unicode.
Aggiornamento: Sembra che il problema è nella DT_WORDBREAK bandiera della DrawText metodo. Ogni volta che rimuovo questo flag, c'è un miglioramento significativo nel disegno del testo anche se i flicker sono visibili.
Esempio Unicoide Testo
तिम्रो त्यो बोलि ले मलाई बोलायो मिठो तिम्रो त्यो मुस्कान मा मलाई झुलायो झुलाओ ह्स्द्जिः स ह्स्ध्फद्ज द्श्जड्स हस फग स्द्फ़ ग स्द्फ्ग फस ग्स्द्फ़ ग्दस्फ्ग द्स्फग्द तिम्रो त्यो बोलि ले मलाई बोलायो मिठो तिम्रो त्यो मुस्कान मला मलाई स ह्स्ध्फद्ज द्श्जड्स हस फग ्द्फ़ ग स्द्फ्ग फस ग्स्द्फ़ ग्दस्फ्ग द्स्फग्द
Sono confuso perché stai creando un'applicazione VCL separata da un'applicazione FMX. Sono curioso perché dovresti farlo? È solo per test? –
@JerryDodge In realtà, sto scrivendo un'applicazione VCL con più funzionalità. Il lettore di notizie è uno di questi è stato lasciato solo per essere implementato. Ho provato a cercare un disegno personalizzato che mostrasse tutta la parte importante. Il primo tentativo è http://stackoverflow.com/questions/33057500/displaying-items-on-the-dbctrlgrid-without-datasource-in-delphi ma non ho potuto ottenere la risposta corretta. Mescolare firemonkey per questo singolo modulo non è una buona idea, immagino. –
Beh, il mio punto era, se stai scrivendo questo in Firemonkey, in primo luogo, suppongo che tu lo abbia fatto per essere multi-piattaforma. Bene, Windows è una delle piattaforme supportate. Perché non mantenere solo un codice base? –