Das sieht mir insgesamt etwas verkrampft aus, da steigt doch niemand durch so. Ich hab die noch falsche Version genommen, und so hin geschrieben, wie ich dann endlich eine Chance hatte sie nachzuvollziehen. Die ganze Verschachtelung die du da anstellt ist viel komplizierter als nötig.
Delphi-Quellcode:
function TDrawPadProperties.GetAll(Sender: TObject): integer; // ****
begin
Result := 0;
if not FSimple then
begin
if (Sender is TCheckBox) and TCheckBox(Sender).Checked and (Pos('_MultiProp', TControl(Sender).Name) > 0) then
Result := 1
else
if (Sender is TPropCheckBox) and TPropCheckBox(Sender).CheckBox.Checked then
Result := 2
else
if (Sender is TPropEdit) and TPropEdit(Sender).CheckBox.Checked then
Result := 3
else
if (Sender is TPropComboBox) and TPropComboBox(Sender).CheckBox.Checked then
Result := 4;
end;
// ShowMessage(TControl(Sender).Name);
end;
Edit: Die vollständige Auswertung Bool'scher Ausdrücke sollte hierbei abgeschaltet bleiben (ist sie standardmäßig), dann bricht ein "if" nämlich sofort ab, wenn das Ergebnis fest steht und prüft die nachstehenden Bedingungen nicht mehr ab. Heisst hier: Wenn (Sender is TPropEdit) bereits false ist, und nachfolgende Bedingungen nur aufgeundet werden, wird der nachfolgende (möglicherweise ungültige) Cast erst gar nicht gemacht. False and "egal was" ist immer false.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)