Autor Beitrag
SpaghettiCodix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52
Erhaltene Danke: 1

WIN XP
Delphi 2 Standart und Delphi 2005 Pers.
BeitragVerfasst: Di 23.10.07 00:02 
Hallo,

ich raffs net. Es wird schon wieder Spaghettiecode draus.

Habe 31 dynamische Labels erzeugt und ihnen einen ClickEvent zugewiesen.
Die Labels stellen die Tage des aktuellen Kalendermonats dar, die beim Anklicken in anderen
nicht dynamischen Labels und zwei Edits ein paar Daten zum aktuellen Tag anzeigen.
Die Daten sind in einem RecordArray gespeichert.

Nun möchte ich die in den Editfeldern angezeigten Daten nach einem
VK_Return im OnkeyDown Ereignis im Array speichern. Außerdem sollen die Dateien nach
dem VK_Return sofort in den Labels angezeigt werden. Ich schaffe es nur über global angelegte Variablen (würg). Einer globalen Variablen wird der aktuelle Arrayindex aus einem Label übergeben und dann ins Edit_KeyDown übergeben. Gehts net anders?

Hier mal der Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
type
TTag = record
 TNum      :Byte;                  //<-Nummer des Tages
 Anw       :string[2];             //<-Anwesenheit(x,k,u,fe,fu)
 abwBegin  :String[5];             //<-Abweichung - Beginn
 abwEnde   :string[5];             //<-Abweichung - Ende
 AStdFaktor:real;                  //<-Arbeitsstunden aus Abweichung
 TgName    :string[10];            //<-Name des Tages
 Sams      :Byte;                  //<-Samstag =1
end;

type
TTagArray = array of TTag;

type
  TForm1 = class(TForm)
...........
...........

implementation

uses Berechnung, eigeneDatumsroutinen;

{$R *.dfm}

var
  Tagarray:TTagarray;
  Labels: array of TLabel;         //<- Labelarray

procedure TForm1.FormCreate(Sender: TObject);
var i, idx :Word;
    Tg:Integer;
begin
 tg:=DaysInMonth;
 idx:=0;
setlength(TagArray,tg);
for i:= 0 to tg-1 do
begin
 inc(idx);
 TagArray[i].TNum:=i+1;
 TagArray[i].Anw:='';
 TagArray[i].abwBegin:= '17:30';
 TagArray[i].abwEnde:= '';
 TagArray[i].TgName:=NamendesTages(ArrIdxalsTagDatum(idx,MonthOf(Now),YearOf(Now)));
 TagArray[i].Sams:=Weekend(TagArray,i);
end;
erzeugeLabels;
end;

procedure TForm1.erzeugeLabels;
var
index,                    // Zeilenzähler
Reihe:integer;            // Spaltenzähler
index2,FTmp, tg: integer;
begin
tg:=DaysInMonth;
SetLength(Labels,tg+1);
FTmp:=TagNummer(Now);
index2 := 1; Reihe:=0;
  for index:=1 to tg do
   begin
     Labels[index]:=TLabel.Create(self);
     If ((Labels[index].top+Labels[index].height)*index2+150) >= Form1.ClientHeight then
       begin
        inc(Reihe); index2:=1;
         Labels[index].left:=150*Reihe;
         Labels[index].Top:= 1+(index2*20);
       end;
     Labels[index].Top  := 1+(index2*20);
     Labels[index].Parent:= Form1;
     Labels[index].AutoSize := false;
     Labels[index].Font.Size := 10;
     Labels[index].Left := 480+(150*Reihe);
     Labels[index].Height:= 20;
     Labels[index].Width:=140;
     Labels[index].name:='Labels'+inttostr(index);
     Labels[index].Caption:= inttostr(TagArray[index-1].TNum)+'   '+TagArray[index-1].TgName;
     Labels[index].Alignment := taLeftjustify;
     Labels[index].Cursor:=crHandPoint;
     Labels[index].Font.color:=clmaroon;
     Labels[index].color:= clmoneygreen;
     if (TagArray[index-1].TgName = 'Samstag'or (TagArray[index-1].TGName='Sonntag')then
      Labels[index].Color:= clskyblue;
     if FTmp=index then Labels[index].Color:= clred;
     Labels[index].Tag:= index-1;
     Labels[index].OnClick := ClickEvent;        //<-ClickEreignis zuweisen !!!
    inc(index2);
   end;
  end;

{das Klick ereignis}
procedure TForm1.ClickEvent(Sender: TObject);
begin
if (Sender is TLabel) then
with TagArray[(Sender as TLabel).Tag] do
  begin
   Label1.Caption:= inttostr(TNum);
   Label2.caption:='TagArray.Anw:  '+ Anw;
   Label3.Caption:='TagArray.abwBegin:  '+ abwBegin;
   Label4.Caption:='TagArray.abwEnde:  '+ abwEnde;
   Label5.Caption:='TagArray.TgName:   '+ TgName;

   Edit1.Text:=abwBegin;    //<- wird im Edit angezeigt und soll verändert werden           
   Edit2.Text:=abwEnde;
  end;
end;

function TForm1.Weekend(ar:TTagarray;idx:byte):Byte;
begin
 if ar[idx].TgName='Samstag'then
 result:= 1 else
 result:= 0;
end;


Wie kann ich die Edits und Labels so synchronisieren, daß daß der Sender von den Labels zu den Edits, aber auch umgekehrt geht und auf die Labels wirkt?!!?
Wer kann mir helfen? :oops: