Ja natürlich die Farbe sieht bescheiden aus. Hab jetzt noch eine Variable für die Schriftfarbe hinzugefügt, eine Variable um die Highlightfunction wärend der Laufzeit an und auszuschalten, und natürlich bessere Farben genommen
:
Delphi-Quellcode:
HighlightEnabled: Boolean = false;
HighlightingColor: TColor = clMaroon;
HighlightingFontColor: TColor = clHighlightText;
//...
procedure TScreenHelper.ActiveControlChange(Sender: TObject);
begin
if Highlighting and not Application.Terminated then
begin
if Assigned(ActiveControl) then
with TControlCracker(ActiveControl) do begin
// undo highlighting
Color := NormalColor;
font.Color := NormalFontColor;
end;
if Assigned(Screen.ActiveControl) then
begin
// do highlighting
if (HighlightEnabled = true) then begin
NormalColor := TControlCracker(Screen.ActiveControl).Color;
NormalFontColor := TControlCracker(Screen.ActiveControl).Font.Color;
ActiveControl := Screen.ActiveControl;
TControlCracker(Screen.ActiveControl).Color := HighlightingColor;
TControlCracker(Screen.ActiveControl).Font.Color := HighlightingFontColor;
end;
end;
end;
if Assigned(SavedActiveControlChange) then
SavedActiveControlChange(Sender);
end;
Einen Vorschlag / Frage hätte ich noch dazu: Da ich das Highlight wärend der Laufzeit ändere, wäre es doch eigentlich sinnvoll, alle Felder auf ReadOnly zu setzen wenn (HighlightEnabled = false) ist, und dann alle aktivieren. Nur habe ich die funktion dafür noch nicht finden können bzw scheine ich den Syntax nicht zu kennen. Mit der Funktion aus den oberen Beiträgen hatte ich einen Erfolg heute Nacht mit:
Delphi-Quellcode:
if (screen.CustomForms[i].Components[j] is TDBEdit) then
begin
(screen.CustomForms[i].Components[j] as TDBEdit).ReadOnly:=readonly; //true oder false
end;
Damit würde es ja gehen, aber dann brauche ich eine extra Schleife die es für jeden Typ dann machen muss. Wobei ich dann auch alle Typen separat einfügen muss.