Avatar billede koden12 Nybegynder
26. maj 2004 - 10:27 Der er 7 kommentarer og
2 løsninger

Hurtig gem knap

Jeg har tit set på Delphi programmer en hurtig gem knap. Hvad er så det ? det er en knap med et "gemsymbol" på og ved klik på den gemmes det man er igang med. Er det en database ( en af flere ) ( den man nu er igang med) klikkes på knappen og knappen bliver ikke tilgængelig, før man igen begynder at skrive noget.

Har nogle lavet sådan en ?

Hvordan ?

VH
koden12
Avatar billede lanstorp Nybegynder
26. maj 2004 - 10:46 #1
Som udvikler ved du hvornår, det data det arbejdes på ændres af brugeren, det er der normalt et event der kan fange. Så er det bare at lave en knap der enables / disables efter behov når der sker ændringer. Skal det være smart skal gem knappen disables når brugeren 'ctrl + z'er (fortryder) tilbage til sidste gang data blev gemt.
Avatar billede stefmeister Nybegynder
26. maj 2004 - 12:56 #2
Har lige lavet en for at se hvor svært det var.

Det er ret simpelt.

Du laver bare to knapper. så giver du dem en Caption hver, en kalder du Gem Som... og den anden for Gem.
Så laver du en Edit. og sletter teksten i den.
Du laver så Gem knappen til at være disablet. Sådan at man ikke kan trykke på den.
Så laver du en SaveDialog, du gør så at når du har gemt den det rigtige sted så skal Edit1.Text := SaveDialog1.FileName;
Så gør du sådan så Gem knappen bliver enabled.

Meget simpelt.
Avatar billede stefmeister Nybegynder
26. maj 2004 - 12:59 #3
sådan ser min .pas fil ud.
Jeg har 2 Memo, 2 knapper, 1 Edit, 1 SaveDialog og 1 Timer.

//-------- Her starter koden ------------------

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Edit1: TEdit;
    SaveDialog1: TSaveDialog;
    Button2: TButton;
    Memo2: TMemo;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a : boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(edit1.Text);
Button1.Enabled := false;
Memo2.Lines.LoadFromFile(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then begin
  Memo1.Lines.SaveToFile(SaveDialog1.FileName);
  Edit1.Text := SaveDialog1.FileName;
  end;
Button1.Enabled := true;
a := true;
Memo2.Lines.LoadFromFile(Edit1.Text);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
if a = true then
Button1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Memo1.Text = Memo2.Text then
Button1.Enabled := false;
end;

end.

//----------- Her slutter koden --------------
Avatar billede stefmeister Nybegynder
26. maj 2004 - 13:01 #4
I min der gør den sådan at man først kan trykke gem når man har trykket Gem Som...

Og når man trykker gem, så bliver den disapled, sådan at man ikke kan trykke på den. Så har jeg lavet en OnChange i memo'en, sådan at hvis man skriver noget nyt i memo'en så kan man igen trykke gem.
Jeg har så lavet en ekstra fines, sådan at hvis der står det samme som der står i den gemte fil, så kan man ikke trykke på gem. Det er det timeren er der for.
Avatar billede stefmeister Nybegynder
26. maj 2004 - 13:02 #5
Du skal lige huske at slette Texten i Memo1 og Memo2 og i Edit1 ellers så går der kludder mudder i det.
Avatar billede stefmeister Nybegynder
26. maj 2004 - 13:02 #6
selvfølgelig som et svar.
Avatar billede koden12 Nybegynder
26. maj 2004 - 13:55 #7
Tak for det store arbejde du har lagt i det , men jeg skrev nu en database netop fordi det er en database, faktisk er der 2 databaser med hver sit navn.
Det andet har jeg..
VH
koden12
Avatar billede stoney Nybegynder
26. maj 2004 - 14:54 #8
Det er noget ala

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
button1.Enabled:=
DataSource1.State in [dsEdit, dsInsert];

end;

Stoney
Avatar billede koden12 Nybegynder
26. maj 2004 - 20:08 #9
Tak for fine svar

VH
koden12
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester