"Unsichtbare" Editbox

Rund um die LCL und andere Komponenten
Antworten
leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

"Unsichtbare" Editbox

Beitrag von leosok »

Hallo allerseits,

ich benutze in einem Projekt eine "unsichbare" edit-box wie man Sie aus dem Web kennt. Ich habe einen Text, über den man nur mit der Maus zu fahren braucht, um Ihn editierbar zu machen. Dafür habe ich ein Label über einer Editbox liegen, und die Editbox wird jeweils visible true oder false gesetzt.

Ich finde dieses Design sehr schön und intuitiv, und würde gerne eine solche Komponente haben um Sie mehrfach einsetzt zu können. Ich habe aber noch nie eine visuelle Komponente programmiert. Ist hier jemand, der mir helfen könnt?

Anbei ein Testprogramm in dem man sieht, was ich meine: http://caossoft.de/nin_edit.zip" onclick="window.open(this.href);return false;

Viele Grüße
leosok

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: "Unsichtbare" Editbox

Beitrag von MAC »

du brauchst ja keine wirkliche visuelle komponente zu programmieren (also die sich selbst zeichnet) sondern kannst einfach eine Klasse nehmen die ein Edit und Label besitzt
beispiel

Code: Alles auswählen

TIntuitivesEdit = class
privat
aLabel:TLabel;
aEdit:TEdit;
private
//... Variablen für Propertys
private
procedure MouseEnter(TSender;...,...);
// weitere Proceduren die du verknüpfen willst. OnEdit, ... OnMouseExit
public
//propertys wie top , Left , Text , eventuell Font die dann aLabel.Top und aEdit.Top gleichzeitig ändern...
end;
 
// und im Create schreibst du dann einfach
aLabel.OnMouseEnter := @MouseEnter// und das für die anderen Methodenmm
Zuletzt geändert von Lori am Mo 5. Mär 2012, 19:20, insgesamt 1-mal geändert.
Grund: Highlighter

Code: Alles auswählen

Signatur := nil;

leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

Re: "Unsichtbare" Editbox

Beitrag von leosok »

Wow. Vielen Dank. Das wäre aber keine Komponente die ich "auf die Form" ziehen kann. Kennst du dafür ein Tutorial?
Andererseits könnte ich natürlich zur Laufzeit einfach aus allen TEdit's TintuitiveEdits machen.

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

Re: "Unsichtbare" Editbox

Beitrag von theo »

leosok hat geschrieben:Wow. Vielen Dank. Das wäre aber keine Komponente die ich "auf die Form" ziehen kann. Kennst du dafür ein Tutorial?
Hier steht ein bisschen was: http://wiki.lazarus.freepascal.org/How_ ... _Component" onclick="window.open(this.href);return false;

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: "Unsichtbare" Editbox

Beitrag von MAC »

ähm also von der Theorie her würde ich sagen müsstest du Ein neues Package machen und da deine TIntuitivEdit Unit reinpacken...
Ich hab das aber selber noch nie so gemacht das ich das auf die Form ziehen kann...

Ich schreib dann immer im Form1Create

Code: Alles auswählen

IntuitivEdit1 := TIntuitivEdit.Create(Form1);
IntuitivEdit1.Parent := Form1;
IntuitivEdit1.Left := 30;
IntuitivEdit1.Top := 40;
IntuitivEdit1.Width := 200;
und das hat den gleichen Effekt...

Code: Alles auswählen

Signatur := nil;

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: "Unsichtbare" Editbox

Beitrag von Scotty »

Wie wäre es hiermit:

Code: Alles auswählen

procedure TForm1.Edit1MouseEnter(Sender: TObject);
begin
  Edit1.BorderStyle:=bsSingle;
  Edit1.Color:=clDefault;
end;
 
procedure TForm1.Edit1MouseLeave(Sender: TObject);
begin
  Edit1.BorderStyle:=bsNone;
  Edit1.Color:=clBtnFace;
end;
Du kannst das OnMouse..-Ereignis von allen Edits damit verknüpfen und per (Sender as TEdit).<> arbeiten. Allerdings funktionieren Acceleratorkeys nicht wie bei einem Label. Ich würde deshalb das Label nicht anfassen und statdessen das entsprechende Edit auf Bedarf in einem Callout anzeigen.

Ergänzung: Der Fokus muss in OnLeave woanders hin verlegt werden, sonst blinkt es. Außerdem sollte die Eigenschaft AutoSelect false sein.

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

Re: "Unsichtbare" Editbox

Beitrag von theo »

@Scotty: Schöne Idee, aber unter Linux klappt das nicht so richtig.
Bei GTK2 bleibt das TEdit weiss und bei Qt entspricht die Farbe des Formulars nicht genau clBtnFace.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: "Unsichtbare" Editbox

Beitrag von Antrepolit »

leosok hat geschrieben:Hallo allerseits,

ich benutze in einem Projekt eine "unsichbare" edit-box wie man Sie aus dem Web kennt. Ich habe einen Text, über den man nur mit der Maus zu fahren braucht, um Ihn editierbar zu machen. Dafür habe ich ein Label über einer Editbox liegen, und die Editbox wird jeweils visible true oder false gesetzt.

Ich finde dieses Design sehr schön und intuitiv(...)
Tut mir leid, aber intuitiv ist das bestimmt nicht. Wer käme denn auf die Idee, dass ein Label eine aktive Komponente ist?
Wenn man es wirklich intuitiv machen will, dann sollte man bei den bekannten Komponenten bleiben. Solche Spielereien hin oder her,
Jemand der deine Software nicht kennt, wird lange brauchen, um herauszufinden, wie er denn da etwas editieren kann.

Ich persönlich ärgere mich immer wieder übder Software mit selbsgebastelten GUIs, deren Bedienung von vorne bis hinten fehlerhaft ist.
Grüße, Antrepolit

care only if your os is really burning

leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

Re: "Unsichtbare" Editbox

Beitrag von leosok »

@Antrepolit

Wenn man es falsch undurchdacht einsezt, hast du sicherlich recht. Edit-Felder sind aber viel schlechter lesbar als Labels.
Macht man z.B. einen Bearbetiugnsmodus in dem viele Daten dargestellt werden müßen aber nur wenige verändert, ist so eine Darstellung wesentlich lesbarer.In meinem Fall kann man den Wert über einen Slider einstellen; nur wenn man es ganz "genau" haben will, muß man an das Edit ran (um eine Zahl einzugeben). Wenn man Wert auf ein cleanes Interface legt, gibt es also durchaus Einsatzmöglichkeiten. Das steht natürlich bei vielen Anwendungen nicht im Vordergrund :-)

leosok
Beiträge: 24
Registriert: Mi 10. Nov 2010, 01:12

Re: "Unsichtbare" Editbox

Beitrag von leosok »

@ Scotty

Super Idee: unter Windows7 funktioniert es perfekt. Weil ich mit einer weißen Form arbeite, brauche ich nicht einmal die Farbe des Edits zu ändern. Das ist mein Code:

Code: Alles auswählen

procedure TForm1.Edit2MouseEnter(Sender: TObject);
var myedit:Tedit;
begin
 
  myedit := Sender as TEdit;
 
  myedit.BorderStyle:=bsSingle;
 
  myedit.top := myedit.top - 3;
  myedit.left := myedit.left - 3;
 
end;
 
procedure TForm1.Edit2MouseLeave(Sender: TObject);
var myedit:Tedit;
begin
 
  myedit := Sender as TEdit;
 
  myedit.BorderStyle:=bsNone;
  myedit.Cursor:=crNone;
  myedit.ReadOnly:=True;
 
  myedit.top := edit2.top + 3;
  myedit.left := edit2.left + 3;
 
  button1.SetFocus;
end;

Antworten