SENDER an andere Form übermitteln

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

Mir war ein bisschen langweilig und habe an einer Eingabeeinheit rumgebastelt. Die Ganze Einheit wird dynamisch aufgebaut, somit ist sie recht flexibel, wen man sie um mehr Stellen erweitern will.
Was noch fehlt sind die Bitmaps in den Buttons, auch ist der Text noch nicht richtig formatiert.

http://mathias1000.bplaced.net/test/EingabeEinheit.tar.gz
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: SENDER an andere Form übermitteln

Beitrag von sstvmaster »

Hi Mathias,

Bezug:


ich würde statt:

Code: Alles auswählen

 
  if EingabeForm.ShowModal = mrOk then begin
    Str(EingabeForm.Wert:4, s);
    L.Caption := s;
  end;
 


das so machen:

Code: Alles auswählen

 
  if EingabeForm.ShowModal = mrOk then begin
    L.Caption := Format('%.4d',[EingabeForm.Wert]);
  end;
 


das würde mir dann besser gefallen.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

Eine neue Version.
http://mathias1000.bplaced.net/test/EingabeEinheit.tar.gz
Jetzt kann man bei CreateNew die Anzahl Ziffern festlegen.
Im EingabeForm wird jetzt alles mit String und Char abgearbeitet. Somit hat man den Vorteil das die komplizierte Zerlegung der Integer entfällt.
Noch ein Vorteil, mit einer kleine Änderung ist es auch möglich Buchstaben einzugeben.
Wen der Nutzer die Ausgabe als Integer bracht, dann kann er es immer noch selbst umwandeln.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: SENDER an andere Form übermitteln

Beitrag von wp_xyz »

Du solltest die Ziffern noch sauber zentrieren, und auch ihren Hintergrund ausschalten (der weiße Text-Hintergrund auf dem grauen Panel-Hintergrund sieht zumindest unter Windows "falsch" aus):

Code: Alles auswählen

procedure TEingabeEinheit.EinageEinheitPaint(Sender: TObject);
var
  s: TSize;
begin
  Canvas.Brush.Style := bsClear;
  Canvas.Font.Height := 76;
  s := Canvas.TextExtent(Wert);
  Canvas.TextOut((Width - s.cx) div 2, (Height - s.cy) div 2, Wert);
end;

Jetzt könntest du zur Übung noch eine Komponente daraus machen...

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

Du solltest die Ziffern noch sauber zentrieren, und auch ihren Hintergrund ausschalten (der weiße Text-Hintergrund auf dem grauen Panel-Hintergrund sieht zumindest unter Windows "falsch" aus
Du bist ein richtiger Hellseher, genau dies habe ich gesucht. :wink:
Mit Font.Height, hat die Zentrierung nicht richtig hin gehauen.
Ich sehe schon, was die LCL anbelangt kann ich noch viel lernen. :wink: :idea:

Jetzt könntest du zur Übung noch eine Komponente daraus machen...

Das wäre mal noch was. Man könnte den Dialog als Komponente machen.

http://mathias1000.bplaced.net/test/EingabeEinheit.tar.gz
Jetzt sieht es einiges besser aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: SENDER an andere Form übermitteln

Beitrag von sstvmaster »

Hi Mathias,

ich hab noch ein MouseWheelUp + Down hinzugefügt.

Weis einer von euch wie das mit einem Touch Display aussieht? Ich meine wird da auch das onMouse... Event genommen?

Natürlich nicht wenn man auf einen Button drückt, das ist mir schon klar,

http://www.dl0ftl.de/dm4ywl/EingabeEinheit_MouseWheel.zip

LG Maik
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: SENDER an andere Form übermitteln

Beitrag von wp_xyz »

Mathias hat geschrieben:
Jetzt könntest du zur Übung noch eine Komponente daraus machen...

Das wäre mal noch was. Man könnte den Dialog als Komponente machen.

Ich hätte eher an die Gruppe von TEingabeEinheiten gedacht, ohne die Standard-Dialog-Buttons. Damit wäre der Einsatzbereich größer. Auch müsste der Font, v.a. Font.Size, des Zifferndisplays einstellbar sein (Font des Panel verwenden).

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

ich hab noch ein MouseWheelUp + Down hinzugefügt.

Ich habe das bei mir jetzt auch eingebaut.
Nur habe ich das Up und Down ausgelagert, die Auswertung ist die gleiche wie bei den Buttons.

Code: Alles auswählen

procedure TEingabeEinheit.Up;
begin
  Inc(FWert);
  if FWert > '9' then begin
    FWert := '0';
  end;
end;
 
procedure TEingabeEinheit.Down;
begin
  Dec(FWert);
  if FWert < '0' then begin
    FWert := '9';
  end;
end;
 
procedure TEingabeEinheit.BtnClick(Sender: TObject);
begin
  if Sender = BtnUp then begin
    Up;
  end;
  if Sender = BtnDown then begin
    Down;
  end;
  Invalidate;
end;
 
procedure TEingabeEinheit.EingabeEinheitMouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if WheelDelta < 0 then begin
    Up;
  end;
  if WheelDelta > 0 then begin
    Down;
  end;
  Invalidate;
end;


http://mathias1000.bplaced.net/test/EingabeEinheit.tar.gz

Ich hätte eher an die Gruppe von TEingabeEinheiten gedacht, ohne die Standard-Dialog-Buttons. Damit wäre der Einsatzbereich größer. Auch müsste der Font, v.a. Font.Size, des Zifferndisplays einstellbar sein (Font des Panel verwenden).

Meinst du anstelle des Forms, ein Panel nehmen ?

Weis einer von euch wie das mit einem Touch Display aussieht? Ich meine wird da auch das onMouse... Event genommen?

Ich denke mal, das dies nicht geht. Oder hast du mal auf einem Tablett/Handy ein Whell-Ereigniss gesehen.
Ausser das Wischen wird als Whell Ereigniss genommen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: SENDER an andere Form übermitteln

Beitrag von wp_xyz »

Mathias hat geschrieben:
Ich hätte eher an die Gruppe von TEingabeEinheiten gedacht, ohne die Standard-Dialog-Buttons. Damit wäre der Einsatzbereich größer. Auch müsste der Font, v.a. Font.Size, des Zifferndisplays einstellbar sein (Font des Panel verwenden).

Meinst du anstelle des Forms, ein Panel nehmen ?

Ja, oder noch besser, ein TWinControl o.ä,, denn in ein Panel kann man immer noch andere Controls ablegen, und ich kann mir nicht vorstellen, dass das sinnvoll ist. Und ein Panel kann viel mehr als man hier benötigt. Wieso die Komponente mit unnötigem Code aufblähen?

Etwas weniger anspruchsvoll, aber auch sehr allgemein anwendbar, wäre es auch, statt TForm ein TFrame zu nehmen.

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

Ja, oder noch besser, ein TWinControl o.ä,,

Ich habe es jetzt in TWinControl ausgelagert.

http://mathias1000.bplaced.net/test/EingabeEinheit.neu.tar.gz

Hast du dir dies etwa so vorgestellt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: SENDER an andere Form übermitteln

Beitrag von wp_xyz »

ja

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

Ein OnChange-Ereignis müsste noch rein.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SENDER an andere Form übermitteln

Beitrag von Mathias »

So nun habe ich ein OnChange-Ereignis eingebaut.

http://mathias1000.bplaced.net/test/Ein ... neu.tar.gz

In dem TitelBalken des Eingabeforms zeigt es zur Kontrolle das Ereignis an.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten