Text markieren in TEdit

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Text markieren in TEdit

Beitrag von wolfdec »

Weiss nicht ob es ein Bug ist, aber ich vermute es mal.

Version: 0.9.26

Linux:
Wenn ich in einem TEdit die Farbe ändere, zb beo onEnter auf clYellow setze. Dann kann ich nicht sehen ob irgendwelcher Text markiert ist.
Ist Color auf clWindow, dann wird markierter Text grau hinterlegt.

Unter Windows ist der effekt nicht, dort sieht man auch mit clYellow den markierten Text grau.

edit:
Vermute mal es ist der Bug:
http://bugs.freepascal.org/view.php?id=8684" onclick="window.open(this.href);return false;
Dort steht zwar: 2008-04-15 19:22 Felipe Monteiro de Carvalho Fixed in Version => 0.9.25 (SVN)

aber in 0.9.26 ist er wohl doch wieder da, oder ist der nur in der SVN gefixed.
Zuletzt geändert von wolfdec am Fr 13. Feb 2009, 11:15, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Text markieren in TEdit

Beitrag von theo »

Kann schon sein, dass das ein Bug ist.
Aber mein Tipp: Ändere die Farbe nicht und lass die Widgetsets und Themes ihre Arbeit tun. Die Augen deiner User werden es dir danken ;-)

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: Text markieren in TEdit

Beitrag von wolfdec »

theo hat geschrieben:Kann schon sein, dass das ein Bug ist.
Aber mein Tipp: Ändere die Farbe nicht und lass die Widgetsets und Themes ihre Arbeit tun. Die Augen deiner User werden es dir danken ;-)
Mein Ziel war es für eine Eingabemaske, das aktuelle EDIT-Feld durch einen gelben Hintergrund farblich hervor zu heben. Sowas mögen manche Büromenschen.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Text markieren in TEdit

Beitrag von Christian »

Naja, bin da ganz Theos meinung 2 mögen das und 20 bekommen augenkrebs.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: Text markieren in TEdit

Beitrag von wolfdec »

Immerhin kenne ich einige nicht ganz kleine professionelle Anwendungen die genau dies machen. Die Farbe sollte dann etwas dezenter sein.
Die Praxis ist zb.:
Man schreibt Daten von einem Dokument in eine Eingabemaske.
Blick auf Monitor, sofort ist der Blick auf dem Feld. Tab zum nächsten Feld.
Blick Zettel, Blick Monitor und wieder sind die Augen direkt auf dem aktiven Feld gerichtet.

Bei einheitsgrau-weiss.
Blick Zettel, Blick Monitor, aktives Feld suchen.
Blick Zettel, Blick Monitor, aktives Fedl suchen.
Sicher nur eine Sache von einer Sekunde, aber trotzdem eine Arbeitserleichterung.

Man kann es natürlich auch abschaltbar machen.

-> Bug:
noch mal getestet mit GTK.
dort kann ich den Hintergrund ändern, und die Farbe für den markierten Text bleibt erhalten.
Dafür gibt es dort etwas anderes lustiges. Markiere ich einen Text, gehe in ein anderes Edit, bleibt im ersten noch die Markierung (Blau), markiere ich im zweiten den Text, geht die Markierung im ersten weg. Nur wird das Blaue nicht wieder gelb, sondern grau.

Unter GTK2 geht die Farbe für den markierten Text verloren.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Text markieren in TEdit

Beitrag von theo »

Lass es einfach bleiben ;-)

Wenn du darauf bestehst, lies zuerst hier ("Overview")
http://ometer.com/gtk-colors.html" onclick="window.open(this.href);return false;

Wenn du's implementieren willst, vielleicht hier anfangen:
http://library.gnome.org/devel/gtk/stab ... -modify-bg" onclick="window.open(this.href);return false;

Vielleicht kann man es auch anders lösen. Schieb z.B. ein Timage oder TShape mit einem Pfeil vor das aktive TEdit.

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: Text markieren in TEdit

Beitrag von wolfdec »

theo hat geschrieben:Lass es einfach bleiben ;-)

Wenn du darauf bestehst, lies zuerst hier ("Overview")
http://ometer.com/gtk-colors.html" onclick="window.open(this.href);return false;

Wenn du's implementieren willst, vielleicht hier anfangen:
http://library.gnome.org/devel/gtk/stab ... -modify-bg" onclick="window.open(this.href);return false;

Vielleicht kann man es auch anders lösen. Schieb z.B. ein Timage oder TShape mit einem Pfeil vor das aktive TEdit.
Danke für die Links. Hab es jetzt fast so, wie ich es will.
Bleiben lassen ist leider keine Lösung. Auch wenn es kein schwerwiegender Bug ist. Verwunderlich ist nur, dass er in der .25 geschlossen wurde in der .26 aber noch vorhanden.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Text markieren in TEdit

Beitrag von theo »

wolfdec hat geschrieben: Verwunderlich ist nur, dass er in der .25 geschlossen wurde in der .26 aber noch vorhanden.
Ich glaube der Bug der da geschlossen wurde ist nur der von der ursprünglichen Beschreibung.
Das mit der Selection war ja nur ein Kommentar.
http://bugs.freepascal.org/view.php?id=8684" onclick="window.open(this.href);return false;

Eb
Lazarusforum e. V.
Beiträge: 240
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Text markieren in TEdit

Beitrag von Eb »

Wenn du es jetzt hast, könntest du vielleicht dein Lösung hier posten?

Eberhard

wolfdec
Beiträge: 15
Registriert: Di 3. Feb 2009, 10:19

Re: Text markieren in TEdit

Beitrag von wolfdec »

bei onEnter bzw. onEditDone()


die unit, sicher noch etwas überarbeitbar.

Code: Alles auswählen

unit wdui;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, StdCtrls, Graphics
  {$IFDEF LINUX},gtk2,gdk2,GTKProc{$ENDIF}
  ;
 
procedure onEnterColor(obj:TEdit);
procedure onLeaveColor(obj:TEdit);
 
{$IFDEF LINUX}
function myAllocGDKColor(const AColor: LongInt): TGDKColor;
procedure set_TextViewColor( aTextView : TEdit; aColor : Tcolor );
{$ENDIF}
 
implementation
 
procedure onEnterColor(obj:TEdit);
begin
{$IFNDEF LINUX}
  obj.Color:=clYellow; // Bug with GTK2
{$ENDIF}
{$IFDEF LINUX}
  set_TextViewColor(obj,clYellow);
{$ENDIF}
 
end;
 
procedure onLeaveColor(obj:TEdit);
begin
{$IFNDEF LINUX}
  obj.Color:=clWindow; // Bug with GTK2
{$ENDIF}
 
{$IFDEF LINUX}
  obj.SelLength:=0;
  set_TextViewColor(obj,clText );
{$ENDIF}
end;
 
{$IFDEF LINUX}
 
// von http://bugs.freepascal.org/view.php?id=8684" onclick="window.open(this.href);return false;
 
function myAllocGDKColor(const AColor: LongInt): TGDKColor;
begin
  with Result do
  begin
    Red := ((AColor shl 8) and $00FF00) or ((AColor ) and $0000FF);
    Green := ((AColor ) and $00FF00) or ((AColor shr 8 ) and $0000FF);
    Blue := ((AColor shr 8) and $00FF00) or ((AColor shr 16) and $0000FF);
  end;
  gdk_colormap_alloc_color(gdk_colormap_get_system, @Result, False, True);
end;
 
procedure set_TextViewColor( aTextView : TEdit; aColor : Tcolor );
var
  lTextView : PGtkTextView;
  lGdkColor : TGDKColor;
begin
  lTextView := GTK_TEXT_VIEW( GetWidgetInfo( PGtkWidget( TEdit( aTextView ).Handle ), false )^.CoreWidget );
  lGdkColor := myAllocGDKColor( aColor );
 
  gtk_widget_modify_base ( pGtkWidget( lTextView ), GTK_STATE_NORMAL, @lGdkColor);
end;
 
{$ENDIF}
 
end.
in der Form hab ich: procedure TForm1.Edit1Enter(Sender: TObject);
geändert in: procedure TForm1.Edit1Enter(Sender: TEdit);

Code: Alles auswählen

procedure TForm1.Edit1Enter(Sender: TEdit);
begin
  onEnterColor(Sender);
end;

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Text markieren in TEdit

Beitrag von theo »

Bravo wolfdec! Endlich mal einer der mit ein paar Hinweisen was anfangen kann.
Da ist der Schritt zum Beitrag zur Verbesserung der LCL nicht mehr weit. ;-)

Antworten