Tedit unter WIN nicht editierbar

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Tedit unter WIN nicht editierbar

Beitrag von malabarista »

Ich habe ein Projekt unter Linux Mint 18.1 64-bit entwickelt und es nach Windows 7 64-bit transportiert.
Es funktioniert alles, bis auf ein paar Tedit-Felder. Sie lassen sich nicht anklicken und auch nicht editieren.
Linux: LCL-Version 1.6.2 , FPC 3.0.0 64-linux-gtk2
Windows: LCL-Version 1.6.4, FPC 3.0.2, i386-win32

Wenn ich die gleiche lfm nach Linux kopiere und das Projekt neu kompiliere, sind die Felder aber editierbar.

Nachstehend die .lfm . Es handelt sich um die Felder vdatum_e und bdatum_e .

Code: Alles auswählen

 
object Fktb: TFktb
  Left = 473
  Height = 750
  Top = 0
  Width = 1024
  Caption = 'Küchentagebuch'
  ClientHeight = 750
  ClientWidth = 1024
  OnClose = close0
  OnCreate = create0
  LCLVersion = '1.6.4.0'
  object titel_l: TLabel
    Left = 46
    Height = 15
    Top = 23
    Width = 42
    Caption = 'Bestand'
    ParentColor = False
  end
  object liste: TStringGrid
    Left = 49
    Height = 590
    Top = 56
    Width = 960
    ColCount = 7
    FixedCols = 0
    Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goThumbTracking, goSmoothScroll]
    RowCount = 1
    TabOrder = 4
    OnPrepareCanvas = ausrichten
  end
  object vdatum_l: TLabel
    Left = 344
    Height = 15
    Top = 23
    Width = 69
    Caption = 'Von Datum : '
    ParentColor = False
  end
  object Button1: TButton
    Left = 448
    Height = 40
    Top = 648
    Width = 160
    Caption = 'Drucken'
    OnClick = drucken
    TabOrder = 2
  end
  object Panel1: TPanel
    Left = 848
    Height = 40
    Top = 648
    Width = 160
    BevelWidth = 3
    Caption = 'Abbruch'
    Color = 8439282
    ParentColor = False
    TabOrder = 5
    OnClick = zuruck
  end
  object bdatum_l: TLabel
    Left = 622
    Height = 15
    Top = 24
    Width = 63
    Caption = 'Bis Datum : '
    ParentColor = False
  end
  object vdatum_e: TEdit
    Left = 448
    Height = 23
    Top = 16
    Width = 100
    MaxLength = 10
    TabOrder = 0
  end
  object bdatum_e: TEdit
    Left = 720
    Height = 23
    Top = 16
    Width = 100
    MaxLength = 10
    TabOrder = 1
  end
  object Button2: TButton
    Left = 48
    Height = 40
    Top = 648
    Width = 163
    Caption = 'Anzeigen'
    OnClick = anzeigen
    TabOrder = 3
  end
end
 

Ich habe ausserdem noch screenshots des Objektinspektors angehängt: einmal Feld:pname (funktioniert) und Feld: vdatum_e (funktioniert nicht).
Dateianhänge
edit2.png
edit1.png

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

Ich habe mal weiter getestet:
bei keinem Tedt kann ich etwas eingeben, nur beim Login-Bildschirm.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

So, jetzt bin ich etwas weiter, brauche aber eure Hilfe.

Wenn ich bei einem Form zuerst die Tab-Taste betätige, dann geht der Cursor in dieses Editfeld und es ist editierbar.

Bedeutet dies, dass der Focus irgendwo (undefiniert) sitzt ?
Und was kann ich dagegen tun ?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Tedit unter WIN nicht editierbar

Beitrag von Michl »

Was ist das Parent des Formulars?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

Das Hauptformular mit einem TMainMenu.

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

Was mir noch aufgefallen ist:
wenn jetzt der Focus beim Tedit1 ist, kann ich nur mittels der TAB-Taste zum Tedit2 kommen.
Ein Anklicken des Tedit2 mit der Maus setzt NICHT den Focus auf edit2, sondern der verbleibt beim edit1. Bis ich die TAB-Taste betätige.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Tedit unter WIN nicht editierbar

Beitrag von Michl »

Unter Windows solltest du kein Parent zuweisen. Das ist ein bekannter Windows-Bug. Lazarus kann da nichts dafür. Nutze einfach normale Fenster (Parent = nil).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

ok, das scheint zu funktionieren mit parent:=nil.

Zwei Fragen habe ich noch:
1. Gilt das generell: unter Windows darf kein Fenster ein parent haben ? Oder nur, falls es sich um das Hauptfenster mit Tmainmenu handelt ?
2. Diese Fenster ohne parent: gibt es da besondere Nachteile oder Konsequenzen, auf die ich beim Programmieren achten muss ?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Tedit unter WIN nicht editierbar

Beitrag von Michl »

Das MDI-Anwendungen Prinzip funktioniert nicht gut unter Windows, sobald mit indirekten Windows Funktionen gearbeitet werden muss. Würde man auf die LCL verzichten, würden diese Fenster richtig reagieren. Ich hatte das Problem mal vor einiger Zeit ausführlicher debuggt und versucht ähnlich hier abzustellen. Hatte es auch zum Laufen bekommen, dabei jedoch eine Menge neue Bugs ins Haus geholt. Einen Bugeintrag dazu gibt es auch noch: https://bugs.freepascal.org/view.php?id=31027

Zu 1.: Ich weiß nicht mehr genau, bei welchen Controls es überall Probleme gibt, daher würde ich generell davon abraten. Wenn man Child-Fenster haben möchte, gibt es andere Lösungen. Viele sind auch hier im Forum schon diskutiert worden.

Zu 2.: Nein.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tedit unter WIN nicht editierbar

Beitrag von malabarista »

dankeschön!

Antworten