Avatar billede kolme Nybegynder
07. marts 2003 - 14:03 Der er 15 kommentarer og
1 løsning

læse fra edit1, edit2, edit3 osv

Hej,
Jeg er ved at lave en label, der skal køre henover skærmen (ligesom en marquee). Når den er kørt hen over en gang skal den næste edit.text puttes ind i label1.caption og køre over skærmen osv.
Mit problem er bare at jeg ikke kan finde ud af hvordan jeg får edit2.text til at være efter edit1.text, hvis I forstår mig.
Avatar billede snowball Novice
07. marts 2003 - 14:25 #1
En lille hurtigt eksempel med en timer, en label, en knap og 3 edit felter

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FirstRun: Boolean;
    Boxe: Array[1..3] of TEdit;
    BoxNo: Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if FirstRun then begin
    FirstRun := False;
    BoxNo := 1;
    Label1.Caption := Boxe[BoxNo].Text;
  end;
  if Label1.Left >= 200 then begin
    if BoxNo = 3 then //Antal edit felter
      Timer1.Enabled := False
    else begin
      Inc(BoxNo);
      Label1.Left := 10;
      Label1.Caption := Boxe[BoxNo].Text;
    end;
  end
  else
    Label1.Left := Label1.Left + 5;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FirstRun := True;
  Boxe[1] := Edit1;
  Boxe[2] := Edit2;
  Boxe[3] := Edit3;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

end.
Avatar billede kolme Nybegynder
07. marts 2003 - 14:50 #2
Kan jeg også få dig til at fortælle mig hvad de forskellige ting gør? F.eks. hvad er Firstrun, hvor kommer Boxno fra, hvad betyder Inc(BoxNo)?
Jeg er ret ny, mht. programmering.
Avatar billede armena Nybegynder
07. marts 2003 - 15:22 #3
Firstrun er en værdi som man kan bruge til True og False. Som du kan se i Private sektionen er Boxno et helt tal værdi, som kaldes Integer!

Tip: Lån Delphi 4 programmering, den bog hjalp mig bl.a. en del. Forklare helt vildt meget om delphi og dets komponenter.
Avatar billede armena Nybegynder
07. marts 2003 - 15:27 #4
fx:
Label1.Caption := Boxe[BoxNo].Text;
Betyder:
Label1's tekst er lig med Boxe[Helt tal]'s tekst!
Boxe er de 3 edits
Avatar billede kolme Nybegynder
07. marts 2003 - 15:29 #5
Kunne boxno ikke ligeså godt defineres under Var?
Jeg har Delphi 3 for Dummies (som jeg har købt i tidernes morgen), men jeg synes ikke at jeg kunne finde noget om det her - Derfor spurgte jeg på eksperten.
Avatar billede snowball Novice
07. marts 2003 - 15:45 #6
Kommenteret udgave.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FirstRun: Boolean; //Idikerer om det er første gang vi kører
    Boxe: Array[1..3] of TEdit; //Array der indeholder de 3 (kan sagtens laves størrer) edit felter
    BoxNo: Integer; //Viser hvilket et af felterne vi er ved
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if FirstRun then begin //Hvis det er første gang, så tager vi teksten fra det første edit felt og sætter ind i Label1
    FirstRun := False; //Det er ikke længere første gang vi kører
    BoxNo := 1; //Første edit felt
    Label1.Caption := Boxe[BoxNo].Text; //Sæt teksten fra felt X ind i label1
  end;
  if Label1.Left >= 200 then begin //Hvis vi er nået til kanten (altså hvor lang til højre den skal)...
    if BoxNo = 3 then //...og vi er ved sidste edit felt...      Timer1.Enabled := False //...stop da timer1 da vi er nået til kanten med det sidste edit felt
    else begin //Vi er nået til kanten, men ikke det sidste edit felt..
      Inc(BoxNo); //inkrementerer positionen i array'et så vi vælger det næste edit felt
      Label1.Left := 10; //Flyt label1 ud til venstre igen
      Label1.Caption := Boxe[BoxNo].Text; //Hent den næste tekst
    end;
  end
  else //Vi er ikke ved kanten...
    Label1.Left := Label1.Left + 5; //...så vi flytter label1 lidt længere til højre

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FirstRun := True; //Det er første gang vi kører
  Boxe[1] := Edit1; //Navnet på det første edit felt
  Boxe[2] := Edit2; //Navnet på det andet edit felt
  Boxe[3] := Edit3; //Navnet på det tredje edit felt
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := True; //Start timeren så label1 flytter sig
end;

end.

Hjalp det !? :)

Snowball
Avatar billede snowball Novice
07. marts 2003 - 15:47 #7
BoxNo ligger ikke i Timer1's Var del da vi jo ikke skal lave variablen hver gang vi skal flytte label1. Desuden skal vi jo overordnet holde styr på hvor langt vi er nået.

Snowball
Avatar billede kolme Nybegynder
07. marts 2003 - 15:51 #8
Det kan jeg godt se, men hvorfor skal den ligge under:
implementation
  var
BoxNo: integer;
Istedet for under private?
Avatar billede kolme Nybegynder
07. marts 2003 - 15:53 #9
Når jeg vil compile melder den fejl ved både Boxe og BoxNo i nedenstående:
private
    Boxe: Array[1..24] of TEdit;
    BoxNo: Integer;
Avatar billede kolme Nybegynder
07. marts 2003 - 15:58 #10
Jeg skrev:
Det kan jeg godt se, men hvorfor skal den ligge under:
implementation
  var
BoxNo: integer;
Istedet for under private?
Men mente:
Det kan jeg godt se, men hvorfor skal den IKKE ligge under:
implementation
  var
BoxNo: integer;
Istedet for under private?
Avatar billede kolme Nybegynder
07. marts 2003 - 16:13 #11
Er der nogen der kan fortælle mig hvorfor jeg får den fejl?
Avatar billede kolme Nybegynder
07. marts 2003 - 16:15 #12
Jeg har desuden lige forøget pointene fra 15 til 100, da jeg kan se at det vil tage lidt længere tid end jeg havde regnet med...
Avatar billede snowball Novice
07. marts 2003 - 16:28 #13
Hvad er fejlen !?

Snowball
Avatar billede kolme Nybegynder
07. marts 2003 - 16:35 #14
[Error] Unit1.pas(20): Illegal character in input file: ' ' ($A0)
Avatar billede kolme Nybegynder
07. marts 2003 - 20:34 #15
Så har jeg fået det til at virke, men jeg har altså puttet
Boxe: Array[1..3] of TEdit;
BoxNo: Integer;
ind under
Implementation
Var
Hvilket virker, i modsætning til det andet.
Avatar billede kolme Nybegynder
11. maj 2003 - 16:16 #16
Tak for hjælpen - Havde helt glemt at jeg ikke havde acepteret.
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