AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Focus von Felder besser hervorheben (global)

Ein Thema von Sven Janssen · begonnen am 15. Jul 2004 · letzter Beitrag vom 6. Mai 2006
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 08:52
Hi,

den Fehler findest du bestimmt, wenn du mal einen Haltepunkt in die Routine setzt und sie schrittweise durchgehst.

Die Idee von Sven dieses Event zu nutzen finde ich nicht schlecht, die Umsetzung lässt sich noch verfeinern. Ich habe eine Unit ScrHelper angehängt, die einfach als letzte Unit in die Uses-Anweisung des Projekts aufgenommen werden sollte und dann geht alles automatisch. Wer will kann im OnCreate() der MainForm noch die globalen Variablen Highlighting und HighlightingColor setzen - mehr ist nicht nötig, keine Includes, keine externen Abhängigkeiten und event chaining ist auch an Bord. So richtig schön ist es trotzdem noch nicht, da Grids und eventuell auch noch andere komplexe Controls eine Sonderbehandlung benötigen, aber mehr Zeit habe ich gerade nicht.

For what it's worth

marabu
Angehängte Dateien
Dateityp: pas scrhelper_330.pas (1,4 KB, 58x aufgerufen)
Dateityp: pas scrhelper_169.pas (3,6 KB, 80x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#12

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 09:38
Du musst Dir natürlich die Farben merken bevor Du ein Feld selektierst und beim verlassen wieder auf die Ursprungsfarbe setzen.

Delphi-Quellcode:
if (screen.ActiveControl is TCheckbox) then begin
        fieldColorBackgroundBevorGetFocus:=(screen.ActiveControl as TCheckbox).color;
        fieldColorTextBevorGetFocus:=(screen.ActiveControl as TCheckbox).font.color;
        fieldNameBevorGetFocus:=screen.ActiveControl.name;
        fieldFormNameBevorGetFocus:=screen.ActiveCustomForm.name;
        (screen.ActiveControl as TCheckbox).color:=backColor;
        (screen.ActiveControl as TCheckbox).font.color:=fontcolor;
end;
Und dann ca so etwas in der Art :
Delphi-Quellcode:
 for i:=0 to screen.CustomFormCount-1 do begin
        for j:=0 to screen.CustomForms[i].ComponentCount-1 do begin
            if (screen.CustomForms[i].name = fieldFormNameBevorGetFocus) and
                (screen.CustomForms[i].Components[j].name = fieldNameBevorGetFocus) then begin
                if (screen.CustomForms[i].Components[j] is TEdit) then begin
                    (screen.CustomForms[i].Components[j] as TEdit).color:=fieldColorBackgroundBevorGetFocus;
                    (screen.CustomForms[i].Components[j] as TEdit).font.color:=fieldColorTextBevorGetFocus;
                end;
Gruß Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 10:39
Zitat von marabu:
So richtig schön ist es trotzdem noch nicht, da Grids und eventuell auch noch andere komplexe Controls eine Sonderbehandlung benötigen, aber mehr Zeit habe ich gerade nicht.
Richtig Toll! Deine Funktion geht ja tadellos! Für meine Zwecke reicht das vollkommen aus. Vielen Dank!
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 10:54
Freut mich wenn es dir hilft, aber nimm eine bessere Farbe als clYellow.

Und sei herzlich willkommen in der Delphi-PRAXiS

marabu *vergesslich-ist*

PS: Danke auch an Sven - für die tolle Idee.
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#15

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 11:41
Nimm am besten die Farben von Windows.
Wir haben Standardmäßig clInfoBK und clInfoText. Wahlweise kann man einfach eine .ini Datei erstellen mit 2 Parametern und diese haben dann Vorang. So kann jeder User sich das selber einstellen.

@marabu
Meine Kontodaten sind 1600.... ;-)
Ne Spaß bei Seite. Schade das Windows das nicht selber liefert. Immerhin ist das eine Imense Hilfe für Benutzer die nicht mehr so jung sind oder selten am PC arbeiten.

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 11:53
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.
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#17

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 12:20
Ich würde nie eine Feste und eine Variablesystemfarbe kombinieren. Das kann ganz böse enden ;-)
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: Focus von Felder besser hervorheben (global)

  Alt 5. Mai 2006, 13:51
Ich habe eine verbesserte Fassung an den Beitrag #11 angehängt. Ich habe dabei Eure Vorschläge berücksichtigt, aber auch die Handhabung geändert. Das Highlighting wird jetzt zur Laufzeit ein- und ausgeschaltet, indem ScreenHelper.Connected auf True bzw. False gesetzt wird. Alle Details findet ihr im (wie immer unkommentierten) Quelltext.

marabu
  Mit Zitat antworten Zitat
hronny

Registriert seit: 4. Mai 2006
Ort: Thüringen
97 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Focus von Felder besser hervorheben (global)

  Alt 6. Mai 2006, 01:41
Top! Script geht 1. Sahne!
grep -ri shit /usr/src/linux/*
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz