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:
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; Anw :string[2]; abwBegin :String[5]; abwEnde :string[5]; AStdFaktor:real; TgName :string[10]; Sams :Byte; end;
type TTagArray = array of TTag;
type TForm1 = class(TForm) ........... ...........
implementation
uses Berechnung, eigeneDatumsroutinen;
{$R *.dfm}
var Tagarray:TTagarray; Labels: array of TLabel; 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, Reihe:integer; 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; inc(index2); end; end;
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; 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?
