Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH (https://www.delphipraxis.net/213407-delphi-7-32-bit-unter-windows-10-11-64-bit-pro-deu-und-enu-dateien-crash.html)

paule32.jk 29. Jul 2023 12:07

AW: Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH
 
ja, richtig !
Ich bin ja schon sehr Froh, das sich überhaupt auf meine Fragen meldet.

Wie ich schon schrieb, bin ich nicht so der Fan von Community-Versionen, die immer mehr (oder weniger)
Optionen anbieten, die man dann nur in einer Pro Version hat.

Es stimmt schon, das IHR ALLE hier das aus freien Willen machen (Support).

Aber die andere Seite will ja ein Produkt verkaufen, das mehr oder minder auch viel Arbeit
dahinter gestanden hat, und die kleinen Entwickler (also die Indianer und Polen) auch wenn Sie
Arm dran sind, jeden Tag Brot und Wasser brauchen.

Das ginge mir genauso.
Aber ich bin da in einer priviligen Situation, die ich dann auch damit entgegen komme, das ich
an anderer Stelle auch Support gebe (sofern es mir möglich ist).

Weil, man sollte mich verstehen, ich kein Trendsetter bin, und auch nicht mit der Masse gehe,
vieles von und mit Retro-Ware genutzt wird.

Es steht also kein Job vor mir, den ich brauche, um eine Familie durchzubringen.
Von daher schon ein

DICKES DANKESCHÖN FÜR SOWAS WIE HIER !!!

Gruß, paule32

paule32.jk 29. Jul 2023 17:05

AW: Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH
 
Hallo,

ich war mal so frei, und habe die angehängte reinit.pas Datei bearbeitet.
Sie wirft eine Ausnahmw wie zum Beispiel:

"Resource TTimer1 not found."

im except block.

Ich gehe mal davon aus, dass die Delphi Anwendung zwar die Ressourcen-DLL (.DEU)
laden kann, aber keine Ressourcen zur Verfügung stehen.

Hatte aber explizit alle Projekte ein Update gegönt.

Code:
unit reinit;

interface

uses
  Windows, Dialogs, Messages, SysUtils, Classes, Graphics, Controls, Forms;

procedure ReinitializeForms;
function LoadNewResourceModule(Locale: LCID): Longint;

implementation

uses
  EditorForm;

var
  NewInst: Longint;
  FileLocale: String;

type
  TAsInheritedReader = class(TReader)
  public
    procedure ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer); override;
  end;

procedure TAsInheritedReader.ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer);
begin
  inherited ReadPrefix(Flags, AChildPos);
  Include(Flags, ffInherited);
end;

function SetResourceHInstance(NewInstance: Longint): Longint;
var
  CurModule: PLibModule;
begin
  CurModule := LibModuleList;
  Result := 0;
  while CurModule <> nil do
  begin
    if CurModule.Instance = HInstance then
    begin
      if CurModule.ResInstance <> CurModule.Instance then
        FreeLibrary(CurModule.ResInstance);
      CurModule.ResInstance := NewInstance;
      Result := NewInstance;
      Exit;
    end;
    CurModule := CurModule.Next;
  end;
end;

function LoadNewResourceModule(Locale: LCID): Longint;
var
  FileName: array [0..260] of char;
  res : DWORD;
  P: PChar;
  LocaleName: array[0..4] of Char;
begin
  res := GetModuleFileName(0, FileName, sizeof(FileName));
  if res <> 0 then
  begin
    GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));

    NewInst := 0;
    Result := 0;

    if Length(LocaleName) > 0 then
    begin
      // Then look for a potential language/country translation
      FileLocale := ChangeFileExt(FileName, '.' + LocaleName);
      NewInst   := LoadLibraryEx(PChar(FileLocale), 0, LOAD_LIBRARY_AS_DATAFILE);

      if NewInst = 0 then
      raise Exception.Create('switch to default');

      Result := SetResourceHInstance(NewInst);
      exit;
    end;
  end else
  raise Exception.Create('Language-Module not loaded !');
  result := 0;
end;

function InternalReloadComponentRes(const ResName: string; HInst: THandle; var Instance: TComponent): Boolean;
var
  hr: HRSRC;
  ResStream: TResourceStream;
  AsInheritedReader: TAsInheritedReader;
begin
  try
    hr := FindResource(newInst, PChar(ResName), RT_RCDATA);
    ResStream := TResourceStream.Create(newInst, ResName, RT_RCDATA);
    try
      // wird nie erreicht !
      showmessage('SENSE');
      AsInheritedReader := TAsInheritedReader.Create(ResStream, 4096);
      try
        Instance := AsInheritedReader.ReadRootComponent(Instance);
      finally
        AsInheritedReader.Free;
      end;
    finally
      ResStream.Free;
    end;
  except
    on E: Exception do
    begin
      ShowMessage('Resource-Error: ' + #13#10 + E.Message);
    end;
  end;
  Result := true;
  exit;
end;

function ReloadInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;

  function InitComponent(ClassType: TClass): Boolean;
  begin
    if ClassType.ClassParent = nil then
    begin
      Result := False;
      exit;
    end;

    Result := InternalReloadComponentRes(ClassType.ClassName, FindResourceHInstance(
    FindClassHInstance(ClassType)), Instance) or Result;
  end;

begin
  Result := InitComponent(Instance.ClassType);
end;

procedure ReinitializeForms;
var
  Count: Integer;
  I: Integer;
begin
  Form1.Memo1.Lines.Clear;

  for I := 0 to Form1.ComponentCount - 1 do
  begin
    if (not (Form1.Components[i] is TControl))
    and (not Form1.Components[i].HasParent)
    then begin
      Form1.Memo1.Lines.Add(Form1.Components[i].Name);
      ReloadInheritedComponent(Form1.Components[I], TForm1);
    end;
  end;
end;

end.

himitsu 29. Jul 2023 19:42

AW: Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH
 
Wieso ist jemand auf die Idee gekommen, die reinit.pas kaputtumzubauen?

Nirgendwo, von D4 bis D2006 sah die jemals so aus,
als dass da jemand auf die Idee kam alle Komponenten auf einer Form durchzulaufen, anstatt nur alle Forms.

paule32.jk 30. Jul 2023 11:27

AW: Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH
 
Zitat:

Zitat von himitsu (Beitrag 1525051)
Wieso ist jemand auf die Idee gekommen, die reinit.pas kaputtumzubauen?

Nirgendwo, von D4 bis D2006 sah die jemals so aus,
als dass da jemand auf die Idee kam alle Komponenten auf einer Form durchzulaufen, anstatt nur alle Forms.

... hab doch oben schon geschrieben, das ich da selbst Hand angelegt habe.

wie meinen - alle Forms ?
geht doch nur um diese, die in meiner Awendung vorkommen - und nicht die, die auf "Screen" zu Finden sind.

und wenn mitnichten alle Komponenten - es werden nur die von der Prozedur beachtet, die auf der Form1 liegen - die, die in einen TFRame liegen, aber dann trotzdem im MainStream Fenster geöffnet vorliegen
nicht beachtet werden, des ja des Problem Nummer 2 ...

Gruß, paule


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr.
Seite 3 von 3     123   

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