Here I added some code to get the right things.
Code
procedure TWPComboBox.UpdateSel;
var i: Integer; r : Boolean; s : Single; f : TFontName;
label search;
begin
if Parent is TWPToolPanel then exit;
if (FRTFEdit <> nil) and not FLockUpdate then
begin
if (FComboBoxStyle = cbsStyleNames) or
(FComboBoxStyle = cbsStyleNamesEx) then
begin
Items.Clear;
if FRtfEdit <> nil then
begin
ItemIndex := FRtfEdit.Memo.RTFData.RTFProps.ParStyles.GetStringList(
Items, not FNoEditItemsInStyleList, FRTFEdit.ActiveStyleName);
end;
end
else if FComboBoxStyle = cbsParAlignment then
begin
// ItemIndex := StrToIntDef(StrPas(PChar(Message.LParam)),0);
end
else if FComboBoxStyle = cbsColor then
begin
if not FRTFEdit.IsSelected then
r := FRTFEdit.CurrentCharAttr.GetColorNr(i)
else r := FRTFEdit.SelectedTextAttr.GetColorNr(i);
if not r then
ItemIndex := -1
else
WPUpdateNumberCombo(Self, i);
end
else if FComboBoxStyle = cbsBKColor then
begin
if not FRTFEdit.IsSelected then
r := FRTFEdit.CurrentCharAttr.GetBGColorNr(i)
else r := FRTFEdit.SelectedTextAttr.GetBGColorNr(i);
if not r then
ItemIndex := -1
else
WPUpdateNumberCombo(Self, i);
end
else if FComboBoxStyle = cbsParColor then
begin
r := FRTFEdit.AGet(WPAT_BGColor,i);
if not r then
ItemIndex := -1 else
WPUpdateNumberCombo(Self, i);
end
else if FComboBoxStyle = cbsFontSize then
begin
if not FRTFEdit.IsSelected then
r := FRTFEdit.CurrentCharAttr.GetFontSize(s)
else r := FRTFEdit.SelectedTextAttr.GetFontSize(s);
{toki - Begin}
if not FRTFEdit.IsSelected then begin
if FRTFEdit is TWPCustomRichText then begin
r := true;
s := TWPCustomRichText(FRTFEdit).CurrAttr.Size;
end;
end;
{toki- End }
if (s<=0) or not r then ItemIndex := -1
else
begin
if Items.IndexOf(#32 + FloatToStr(s)) < 0 then
begin
i := Items.IndexOf(#32 + IntToStr(Trunc(s)));
Items.Insert(i + 1, #32 + FloatToStr(s));
end;
ItemIndex := IndexOf(FloatToStr(s));
end;
end
else if FComboBoxStyle in [cbsPrinterFonts, cbsScreenFonts, cbsAnyFonts, cbsTrueTypeFonts] then
begin
if (FRTFEdit is TWPCustomRichText) then
begin
f := TWPCustomRichText(FRTFEdit).CurrAttr.FontName;
r := true;
end
else
if not FRTFEdit.IsSelected then
r := FRTFEdit.CurrentCharAttr.GetFontName(f)
else r := FRTFEdit.SelectedTextAttr.GetFontName(f);
{toki - Begin}
if not FRTFEdit.IsSelected then begin
if FRTFEdit is TWPCustomRichText then begin
r := true;
f := TWPCustomRichText(FRTFEdit).CurrAttr.FontName;
end;
end;
{toki- End }
if not r or (f='') then ItemIndex := -1
else
begin
search:
i := 0;
while i <Items>= Items.Count then
begin
Items.Add(f);
goto search;
end else if ItemIndex <> i then ItemIndex := i;
end;
end;
end;
end;
Alles anzeigen
There are a lot of functions making the same or should make the same, but do not do it.
Irgendwie sehe ich keinen roten Faden. Viele Sachen kann man so oder so machen. Am Ende sollte dann das gleiche rauskommen. Tut es oft, manchmal aber eben nicht. Dann biste am Suchen und Gucken.
Bei so vielen Funktionen sollte ein "empfohlener Weg" beschrieben werden. Den kann ich nicht finden.
Viele Grüße