DBEdit Felder ReadOnly

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

DBEdit Felder ReadOnly

Beitrag von Michael19692 »

Hallo Forum,

Hänge mal wieder an einem Problem. Zum erfassen meiner Daten habe ich eine Form1 mit den DBEdit Feldern Name, Strasse, PLZ usw. Dazu 4 Buttons mit NEU, Cancel, Speichern und Beenden.
Beim Starten hab ich die Buttons Cancel und Speichern über den Object Inspector auf False setzt. Sobald ich NEU klicke ändern sich die Buttons. Das funktioniert alles korrekt.
Mein Problem ist das die DBedit Felder beim Starten nicht auf False stehen. Finde kein Beispiel wie ich das hinbekomme das die Felder erst beim Klicken auf den Button NEU editierbar werden.

Der Quellcode sieht zur Zeit so aus:

Code: Alles auswählen

 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, Mask, DBCtrls;
 
type
  TForm1 = class(TForm)
    BNeu: TButton;
    BSpeichern: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Table1: TTable;
    BEnde: TButton;
    DBEditName: TDBEdit;
    DBEditStrasse: TDBEdit;
    DBEditPLZ: TDBEdit;
    DBEditOrt: TDBEdit;
    DBEditTelefon: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    BCancel: TButton;
    procedure BEndeClick(Sender: TObject);
    procedure BNeuClick(Sender: TObject);
    procedure BSpeichernClick(Sender: TObject);
    procedure BCancelClick(Sender: TObject);
 
  private     { Private declarations }
    procedure setButtons(m: Byte);
 
  public      { Public declarations }
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.setButtons(m: Byte);
begin
 case m of
  0: begin
      BNeu.Enabled := True;
      BSpeichern.Enabled := False;
      BCancel.Enabled := False;
      end;
  1: begin
      BNeu.Enabled := True;
      BSpeichern.Enabled := False;
      BCancel.Enabled := False
      end;
  2: begin
     BNeu.Enabled := False;
     BSpeichern.Enabled := True;
     BCancel.Enabled := True
     end
 end
end;
 
procedure TForm1.BEndeClick(Sender: TObject);
begin
  Close;
end;
 
procedure TForm1.BNeuClick(Sender: TObject);
begin
  Table1.Append; setButtons(2)
end;
 
procedure TForm1.BSpeichernClick(Sender: TObject);
begin
  Table1.Post; Table1.Edit; setButtons(1)
end;
 
procedure TForm1.BCancelClick(Sender: TObject);
begin
  Table1.Cancel; setButtons(1)
end;
 
 
end.
 
Gruß
Michael

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: DBEdit Felder ReadOnly

Beitrag von Michl »

Michael19692 hat geschrieben:Beim Starten hab ich die Buttons Cancel und Speichern über den Object Inspector auf False setzt.
Du hast wahrscheinlich die Eigenschaft "Enabled" der Buttons im Objektinspektor auf False gesetzt. Genau das Gleiche kannst Du mit den DBEdits machen (hier gäbe es auch noch die Möglichkeit, die Eigenschaft "ReadOnly" auf True oder False zu setzen - wie es oben im Titel steht). Genauso kannst Du diese Eigenschaften zur Laufzeit, z.B. im Eventhandler eines Buttonklicks, auch wieder ändern.

Falls ich Deine Frage richtig verstanden habe?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: DBEdit Felder ReadOnly

Beitrag von Michael19692 »

Abend Michl,

Erstmal Danke für Deine Antwort. Fast richtig. Aber wenn ich die Felder auf False setze, dann muss ich ja die Felder beim klicken auf den Button NEU, ja auch auf True setzen.
Diese Befehlszeile suche ich. Also ich denke mir irgendwie so:

Code: Alles auswählen

 
procedure TForm1.BNeuClick(Sender: TObject);
begin
  Table1.Append; setButtons(2)
  DBEditName.Enabled := True;
  DBEditStrasse.Enabled := True;
end;
 
Würde man das dann so schreiben. Oder schreibt man da eine Methode.

Sorry wenn ich mich unglücklich ausdrücke.

Gruß
Michael

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: DBEdit Felder ReadOnly

Beitrag von Michl »

Kannsr Du prinzipiell so machen, musst nicht für alles eine neue Methode erstellen. Sobald Du zwei Eventhandler hast, in denen der gleiche Code steht oder falls es für die Lesbarkeit günstig ist, kannst Du eine neue Methode erstellen.

PS: Anweisungen würde ich untereinander schreiben und Du hast ein Semikolon vergessen ;)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: DBEdit Felder ReadOnly

Beitrag von Michael19692 »

Hallo Michl,

Danke für Deine Hilfe. OK werde ich machen mit den Anweisungen. Bei dem Semikolon meinst Du hinter dem setButtons ? Hab das aus einem Buch, aber dort war keins.
Ansonsten wüsste ich nicht wo noch eins fehlen würde.

Gruß
Michael

Soner
Beiträge: 724
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: DBEdit Felder ReadOnly

Beitrag von Soner »

Oder TDataSource.AutoEdit auf false setzen, dann kann man nur bearbeiten falls [bearbeiten]-Button von DBNavigator gelickt ist.

Michael19692
Beiträge: 18
Registriert: Mi 14. Mai 2014, 21:08
OS, Lazarus, FPC: Win8 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: DBEdit Felder ReadOnly

Beitrag von Michael19692 »

Morgen Soner,

Wenn ich das so machen würde, aber den DBNavigator nicht verwende, was müsste ich dann bei ButtonClick im Quelltext eintragen um die Funktion vom DBNavigator zu erhalten?

Gruß Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: DBEdit Felder ReadOnly

Beitrag von mse »

Code: Alles auswählen

 
 <deinTDataset>.Edit();
 

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: DBEdit Felder ReadOnly

Beitrag von hde »

Soner hat geschrieben:TDataSource.AutoEdit auf false setzen
das reicht, weil es vom Zustand von TDataset abhängt

Antworten