SENDER an andere Form übermitteln

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Re: SENDER an andere Form übermitteln

Beitragvon Mathias » 2. Jan 2018, 21:39 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon sstvmaster » 3. Jan 2018, 08:02 Re: SENDER an andere Form übermitteln

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.
OS: Windows 7 32/64bit
Lazarus 1.8.4, 32bit
Lazarus 1.9.0 Trunk, 32bit
sstvmaster
 
Beiträge: 41
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.4 + 1.9.0 Trunk / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon Mathias » 3. Jan 2018, 17:33 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 3. Jan 2018, 19:13 Re: SENDER an andere Form übermitteln

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...
wp_xyz
 
Beiträge: 2569
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 3. Jan 2018, 19:57 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon sstvmaster » 3. Jan 2018, 21:39 Re: SENDER an andere Form übermitteln

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
OS: Windows 7 32/64bit
Lazarus 1.8.4, 32bit
Lazarus 1.9.0 Trunk, 32bit
sstvmaster
 
Beiträge: 41
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.4 + 1.9.0 Trunk / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon wp_xyz » 3. Jan 2018, 21:56 Re: SENDER an andere Form übermitteln

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).
wp_xyz
 
Beiträge: 2569
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 3. Jan 2018, 22:48 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 3. Jan 2018, 22:58 Re: SENDER an andere Form übermitteln

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.
wp_xyz
 
Beiträge: 2569
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 4. Jan 2018, 20:08 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 4. Jan 2018, 22:01 Re: SENDER an andere Form übermitteln

ja
wp_xyz
 
Beiträge: 2569
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 4. Jan 2018, 22:42 Re: SENDER an andere Form übermitteln

Ein OnChange-Ereignis müsste noch rein.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 4. Jan 2018, 23:12 Re: SENDER an andere Form übermitteln

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •
Vorherige

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried