OnPaint feuert nicht
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: OnPaint feuert nicht
Nach Bilden oder uns das Projekt zuverfügung stellen kannst du nicht oder? oder uns mehr Code zeigen.
Vielleicht ist das Event nicht verbunden im OI. Es kann an alles liegen.
Vielleicht ist das Event nicht verbunden im OI. Es kann an alles liegen.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Der Quellcode liegt im Lazarus Bugtracker. Link zum Bugtracker von weiter oben hier nochmal:
http://bugs.freepascal.org/view.php?id=19488" onclick="window.open(this.href);return false;
Direktlink zom Quellcode dort:
http://bugs.freepascal.org/file_downloa ... 3&type=bug" onclick="window.open(this.href);return false;
http://bugs.freepascal.org/view.php?id=19488" onclick="window.open(this.href);return false;
Direktlink zom Quellcode dort:
http://bugs.freepascal.org/file_downloa ... 3&type=bug" onclick="window.open(this.href);return false;
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: OnPaint feuert nicht
Hi,
ich hab mir das Projekt mal angeschaut und mein Lazarus scheint mit den ganzen ifdefs Probleme zu haben. Er hat mir die Unit "Windows" angemeckert, obwohl er sie laut ifdef gar nicht beachten sollte. Ich habe es dann wie folgt geändert:Jetzt werden im OI die Prozeduren korrekt angezeigt. Leider kann ich das Projekt nicht testen, da ich das gleiche Problem wie Juha habe.
ich hab mir das Projekt mal angeschaut und mein Lazarus scheint mit den ganzen ifdefs Probleme zu haben. Er hat mir die Unit "Windows" angemeckert, obwohl er sie laut ifdef gar nicht beachten sollte. Ich habe es dann wie folgt geändert:
Code: Alles auswählen
uses
{$ifdef UNIX}
Sockets,
LibC,
BaseUnix,
{$endif UNIX}
{$ifdef WINDOWS}
{$ifdef fpc}
Sockets,
{$endif fpc}
WinSock,
Windows,
{$endif WINDOWS}
mfg Ingo
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Das Problem mit den ifdefs hab ich auch. Bisher hatte ich keine Lösung. Aber Deine Idee ist gut! Allerdings muss das Symbol für Windows nicht Windows, sondern Win32 heißen.
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: OnPaint feuert nicht
Dann wird aber Windows 64-bit ausgeschlossen.Heinrich Wolf hat geschrieben:Allerdings muss das Symbol für Windows nicht Windows, sondern Win32 heißen.
siehe http://delphi.wikia.com/wiki/FreePascal ... versioningtest for families of OSes.
{$ifdef MSWindows}
// ce + win32 + win64, delphi compat
{$endif]
{$ifdef Windows}
// ce + win32 + win64, more logical.
{$endif]
{$ifdef Unix}
// all Unix like OSes. Linux/*BSD/OS X and Solaris. BeOS too if it ever released again.
{$endif}
{$ifdef BSD}
// Free/Net/OpenBSD and Mac OS X
{$endif}
Specific OSes
{$ifdef win32}
// 95/98/ME and 32-bit NT/2k/XP/Vista
{$endif}
{$ifdef win64}
// 64-bit/XP/Vista
{$endif}
{$ifdef wince}
// Windows CE family including PocketPC 2003 and Windows Mobile 5
{$endif}
{$ifdef Linux}
// linux}
{$endif}
{$ifdef FreeBSD}
// FreeBSD
{$endif}
{$ifdef Darwin}
// Darwin is the base OS name of Mac OS X, like NT is the name of the Win2k/XP/Vista kernel. Mac OS X = Darwin + GUI.
{$endif}
{$ifdef SunOS}
// similarly with Solaris. Ifdef solaris also works though.
{$endif}
// additionally OS2 , netware, netwlibc (Linux based Novell), BeOS, AmigaOS.
mfg Ingo
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Das Projekt soll laufen auf
Und ich hab schon Antworten gekriegt, dass es auf Linux 64 Bit nicht compilierbar ist, weil ich die LibC verwende.
Delphi 5 definiert nur Win32, nicht MSWindows
- Lazarus Linux 32 Bit,
Lazarus Windows 32 Bit und
Delphi 5
Und ich hab schon Antworten gekriegt, dass es auf Linux 64 Bit nicht compilierbar ist, weil ich die LibC verwende.
Delphi 5 definiert nur Win32, nicht MSWindows
Zuletzt geändert von Heinrich Wolf am Mi 8. Jun 2011, 21:27, insgesamt 2-mal geändert.
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Mit
an Stelle von
läuft mein Projekt unverändert auf meinen Zielplatformen
Code: Alles auswählen
Uses
{$ifdef Unix}
LibC,
{$endif}
{$ifdef Win32}
Windows,
{$endif}
Code: Alles auswählen
Uses
{$ifdef Unix}
LibC,
{$else}
Windows,
{$endif}
- Lazarus Linux 32 Bit,
Lazarus Windows 32 Bit und
Delphi 5
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: OnPaint feuert nicht
Lösch mal alle *.ppu und *.o Dateien in deinen Verzeichnis.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Alle *.ppu und *.o lösche ich sowieso schon immer wieder. Das beseitigt den OnPaint Fehler nicht.
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: OnPaint feuert nicht
Ich hab zwar keine Ahnung warum der OnPaint nicht ausgelöst wird, aber so wie ich den Code verstehewird der nur ein mal bei Programmstart aufgerufen. Wenn das stimmt, kannst du auch das OnShow-Ereignis verwenden.
Code: Alles auswählen
procedure TMainForm.FormPaint(Sender: TObject);
begin
if Start then
begin
Start := False;
NewColors;
InitNetwork;
ShowPanel(True);
NetworkThread := tNetworkThread.Create(False);
end;
end;
mfg Ingo
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: OnPaint feuert nicht
Wir wärs mit AddFirstShowHandler()? Dann wird die Funktion auch nur einmal aufgerufen (beim ersten Anzeigen).shokwave hat geschrieben:wird der nur ein mal bei Programmstart aufgerufen. Wenn das stimmt, kannst du auch das OnShow-Ereignis verwenden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: OnPaint feuert nicht
Klingt interessant. Kann leider nix dazu finden. Wo kommt die her (Unit)?
mfg Ingo
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: OnPaint feuert nicht
Sry, Hatte mich verschrieben; vollständig heißt’s:
existiert also in jedem Formular; Funktionsweise ist denkbar einfach: einfach während des Konstruktors (OnCreate gehört auch dazu) aufrufen und alles wird beim ersten Anzeigen abgearbeitet.
Code: Alles auswählen
TCustomForm.AddHandlerFirstShow();
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Ich habe einen Breakpoint gesetzt in lcl/include/customcontrol.inc auf
Auf Windows wird dieser Breakpoint getriggert für Mainform, Panel and ToolBar.
Auf Linux wird dieser Breakpoint nur für Panel and ToolBar getriggert.
@shokwave: Kurz bevor ich Deinen Beitrag gelesen hab, hatte ich dieselbe Idee mit OnShow. Damit ist die Funktion auch bei Linux wieder hergestellt. Danke!
@Socke: AddHandlerFirstShow ist eine schöne Sache! Leider wird das nicht von Delphi 5 unterstützt.
Code: Alles auswählen
procedure TCustomControl.Paint;
begin
if Assigned(FOnPaint) then FOnPaint(Self);
end;
Auf Linux wird dieser Breakpoint nur für Panel and ToolBar getriggert.
@shokwave: Kurz bevor ich Deinen Beitrag gelesen hab, hatte ich dieselbe Idee mit OnShow. Damit ist die Funktion auch bei Linux wieder hergestellt. Danke!
@Socke: AddHandlerFirstShow ist eine schöne Sache! Leider wird das nicht von Delphi 5 unterstützt.
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: OnPaint feuert nicht
Vielleicht ging das ja noch nie.
Im letzten funktionierenden Code vor den ganzen Änderungen war OnPaint ein unwichtiger Code, den man nicht bemerkte, wenn er nicht ausgeführt wurde. Der wichtige Code, der den NetworkThread erzeugte, war damals in OnCreate drin.
Take it easy für Linux ist aus Take it easy für Delphi 5 entstanden. Erst mal habe ich den Code von Delphi 5 getrennt und an Linux angepasst. Bei den letzten Änderungen habe ich die *.pas über ifdef wieder mit Delphi 5 zusammengeführt. Dabei habe ich das Erzeugen des NetworkThread nach OnPaint verschoben. Nach den letzten Erfahrungen und der erfreulichen Hilfe hier habe ich das Erzeugen des NetworkThread sowohl für Delphi 5, als auch für Linux nach OnShow verschoben.
Das aktuelle Projekt liegt hier:
http://www.Wolf-Fuerth.de/
http://www.Wolf-Fuerth.de/tewin_de.htm
http://www.Wolf-Fuerth.de/downl1de.htm#TeLinux
http://www.Wolf-Fuerth.de/takeeasy.src.zip
Im letzten funktionierenden Code vor den ganzen Änderungen war OnPaint ein unwichtiger Code, den man nicht bemerkte, wenn er nicht ausgeführt wurde. Der wichtige Code, der den NetworkThread erzeugte, war damals in OnCreate drin.
Take it easy für Linux ist aus Take it easy für Delphi 5 entstanden. Erst mal habe ich den Code von Delphi 5 getrennt und an Linux angepasst. Bei den letzten Änderungen habe ich die *.pas über ifdef wieder mit Delphi 5 zusammengeführt. Dabei habe ich das Erzeugen des NetworkThread nach OnPaint verschoben. Nach den letzten Erfahrungen und der erfreulichen Hilfe hier habe ich das Erzeugen des NetworkThread sowohl für Delphi 5, als auch für Linux nach OnShow verschoben.
Das aktuelle Projekt liegt hier:
http://www.Wolf-Fuerth.de/
http://www.Wolf-Fuerth.de/tewin_de.htm
http://www.Wolf-Fuerth.de/downl1de.htm#TeLinux
http://www.Wolf-Fuerth.de/takeeasy.src.zip