AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeit-Themes verwenden

Ein Thema von musicman56 · begonnen am 8. Okt 2013 · letzter Beitrag vom 9. Okt 2013
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Laufzeit-Themes verwenden

  Alt 9. Okt 2013, 00:33
Zitat:
Ist zwar etwas älter, aber vielleicht hilft ja etwas davon.
Kann man nur hoffen denn das hat ja etwas mit der IDE zu tun in deinem verlinkten link..
Während bei ihm das bei einer kompilierten Exe auftritt. (So wie bei mir damals (DLL)).

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.213 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Laufzeit-Themes verwenden

  Alt 9. Okt 2013, 07:20
Kann man nur hoffen denn das hat ja etwas mit der IDE zu tun in deinem verlinkten link..
Während bei ihm das bei einer kompilierten Exe auftritt. (So wie bei mir damals (DLL)).
Die Delphi-IDE ist ja auch zu großen Teilen mit der VCL entwickelt, also mit dem gleichen GUI-Code der auch bei den mit der IDE erstellten Exes/DLLs verwendet wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#3

AW: Laufzeit-Themes verwenden

  Alt 9. Okt 2013, 12:00
Hallo zusammen,

erst mal vielen Dank für die Rückmeldungen.

JVCL: hatte ich installiert. Jetzt mal testweise deinstalliert, brachte aber nichts.

IDE: In der IDE gibt's keinerlei (Anzeige-)Probleme

Auch das Deaktivieren einiger Packages die ich als potentiellen Verursacher in Verdacht hatte (Abbrevia, AsyncPro, dclAsyncPro, List&Label) hat nichts gebracht. Daraufhin habe ich mir mal einen Großteil der älteren Projekte (überwiegend kleinere Tools und Hilfsprogramme) vorgenommen und dort Laufzeit-Themes aktiviert. Bei einigen hatte ich ähnliche Effekte. Die Logik dahinter ist mir noch nicht klar, es sieht aber derzeit so aus, als wären nur Projekte betroffen, die mit einer älteren Delphi-Version (überwiegend D7) erstellt wurden. Ich ahne nichts Gutes

Derzeit bin ich dabei eines der MdiChilds neu zu erstellen, mit den selben Komponenten der ursprünglichen Form. Noch ein paar Stunden, dann werde ich mehr wissen.
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#4

AW: Laufzeit-Themes verwenden

  Alt 9. Okt 2013, 18:15
Hallo zusammen,

das Problem bzw. die Ursache ist gefunden: Delphi-Fehler oder VCL-Fehler.

Es passiert folgendermaßen: wenn im Formularereignis "OnPaint" oder "OnActivate" externe Aktionen durchgeführt werden, die sich nicht auf das Formular selbst beziehen, dann werden wohl irgendwelche VCL-Ereignisse/Messages nicht mehr korrekt abgearbeitet.

Hintergrund-Info: ich habe mehrere MDI-Anwendungen (ich weiß, MDI wird nicht mehr gerne gesehen, es ist aber aus Anwendersicht oftmals eine sehr elegante Angelegenheit) und dann passiert es zwangsläufig, dass beim Anzeigen einer Form neben den sonstigen Initialisierungen/Größenanpassungen usw. auch mal ein Datenbankzugriff erforderlich ist. Z.B. muss ich Filter/Ranges entfernen oder setzen. Bei modalen Fenstern könnte man das alles in "OnCreate" abarbeiten, nicht so bei MDI-Fenstern. Da ist es fast der Normalfall, dass ein und dieselbe Datenbank mit unterschiedlichen Anzeigekriterien (Filtern, Ranges) in mehreren Fenstern zur Anzeige kommt. Also braucht man OnPaint und OnActivate.

Sind Laufzeit-Themes deaktiviert, klappt das auch alles einwandfrei. Nicht jedoch, wenn Lauffzeit-Themes aktiviert sind, und wenn die aufgerufenen Ereignisse "länger dauern", CPU-Zeit beanspruchen, Datenbank-Aktionen durchführen, oder was auch immer der Auslöser ist. Hab ein paar Stunden mit dem Debugger verbraten, aber kann es nicht eingrenzen.

Lösung des Problems: strikte Trennung von Aktionen die nur das Formular betreffen und schnell abgearbeitet sind (da funktioniert OnPaint und OnActivate) und alles Andere aufgeteilt in "OnCreate" und "OnActivate". Hab es also prinzipiell so gelöst:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
    FFirstActivate: boolean;
  public
    { Public-Deklarationen }
    procedure InitDefaults(FirstActivate: boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FFirstActivate := true;
  InitDefaults(FFirstActivate);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  if FirstActivate
  then FirstActivate := false
  else InitDefaults(false);
end;

procedure TForm1.InitDefaults(FirstActivate: boolean);
begin
  if FirstActivate then begin
    ...
  end;
  ...
end;

end.
Nochmals vielen Dank für eure Anregungen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz