Ein Raspberry soll über Touchscreen bedient werden, d.h. es ist keine Tastatur angeschlossen.
Mehrere Labels sollen mit vierstelligen Zahlenwerten versehen werden können, mit diesen wird dann als Parameter weitergerechnet.
Meine aktuelle Lösung:
Ich habe eine zweite Form 'Eingabe' kreiert und auf dieser vier 'einstellige' Labels (label1000er, label100er, label10er, label1er) nebeneinander abgelegt, zusammen ergeben sie die Illusion einer vierstelligen Zahl.
Über/unter jedem Label befindet sich eine Grafik mit einem Up/Down Pfeil - siehe Anhang.
Über die OnClick Events dieser Grafiken kann ich die einzelnen 'Stellen' der pseudo-vierstelligen Zahl durchblättern.
Code: Alles auswählen
procedure TEingabe.Image1Click(Sender: TObject);
begin
if strtoint(label1000er.Caption) < 9 then label1000er.Caption := inttostr(strtoint(label1000er.Caption) + 1) else label1000er.Caption := '0';
end;
procedure TEingabe.Image3Click(Sender: TObject);
begin
if strtoint(label100er.Caption) < 9 then label100er.Caption := inttostr(strtoint(label100er.Caption) + 1) else label100er.Caption := '0';
end;
procedure TEingabe.Image5Click(Sender: TObject);
begin
if strtoint(label10er.Caption) < 9 then label10er.Caption := inttostr(strtoint(label10er.Caption) + 1) else label10er.Caption := '0';
end;
procedure TEingabe.Image7Click(Sender: TObject);
begin
if strtoint(label1er.Caption) < 9 then label1er.Caption := inttostr(strtoint(label1er.Caption) + 1) else label1er.Caption := '0';
end;
procedure TEingabe.Image2Click(Sender: TObject);
begin
if strtoint(label1000er.Caption) > 0 then label1000er.Caption := inttostr(strtoint(label1000er.Caption) - 1) else label1000er.Caption := '9';
end;
procedure TEingabe.Image4Click(Sender: TObject);
begin
if strtoint(label100er.Caption) > 0 then label100er.Caption := inttostr(strtoint(label100er.Caption) - 1) else label100er.Caption := '9';
end;
procedure TEingabe.Image6Click(Sender: TObject);
begin
if strtoint(label10er.Caption) > 0 then label10er.Caption := inttostr(strtoint(label10er.Caption) - 1) else label10er.Caption := '9';
end;
procedure TEingabe.Image8Click(Sender: TObject);
begin
if strtoint(label1er.Caption) > 0 then label1er.Caption := inttostr(strtoint(label1er.Caption) - 1) else label1er.Caption := '9';
end;
Vielleicht nicht besonders elegant und kompakt, funktioniert aber wenigstens erstmal und ist fürs eigentliche Problem auch nicht weiter relevant .
Die Label der Mainform 'Form1' haben alle das gleiche OnClick Event über das die zweite Form sichtbar gemacht wird:
Code: Alles auswählen
procedure TForm1.LabelClick(Sender: TObject);
begin
dummy := (sender as TLabel).Caption;
Unit2.Eingabe.label1000er.caption := copy(dummy,1,1);
Unit2.Eingabe.label100er.caption := copy(dummy,2,1);
Unit2.Eingabe.label10er.caption := copy(dummy,3,1);
Unit2.Eingabe.label1er.caption := copy(dummy,4,1);
Unit2.Eingabe.visible := true;
end;
Das klappt auch wunderbar, egal welches Label ich anklicke, die jeweilige Zahl wird auf die einzelnen Label der zweiten Form übertragen.
Die Frage jetzt aber: Wie bringe ich das Ergebnis aus der zweiten Form zurück zum auslösenden Label der ersten Form?
Eine direkte Zuweisung (nach Klick auf den 'Übernehmen'-Button) auf ein explizites Label der ersten Form funktioniert:
Code: Alles auswählen
procedure TEingabe.ButtonOKClick(Sender: TObject);
begin
form1.label1.caption := label1000er.caption + label100er.caption + label10er.caption + label1er.caption;
Eingabe.visible := false;
end;
Aber ich möchte natürlich das Ergebnis in das Label der ersten Form schreiben, welches das OnClick Event ausgelöst hat. Und da stehe ich gerade mächtig auf der Leitung.
Ich hoffe die Problembeschreibung war halbwegs verständlich?