AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi 7 32-Bit unter Windows 10/11 64-Bit Pro (.DEU und .ENU Dateien) CRASH
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von paule32.jk · begonnen am 25. Jul 2023 · letzter Beitrag vom 30. Jul 2023
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.731 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 29. Jul 2023, 09:48
Du kannst die Sprache auch in der Registry einstellen. Für Delphi 7 Apps ist das der Zweig HKEY_CURRENT_USER\SOFTWARE\Borland\Locales, bei neueren Delphi Versionen das entsprechende CodeGear oder Embarcadero Pendant (wobei es da auch noch Fallbacks gibt). Dort legt man einen Zeichenfolge-Eintrag (REG_SZ) mit dem vollständigen Pfad zur Exe als Name und dem Sprachkürzel (DE, EN, FR...) als Wert an.

Fehlt dieser Eintrag wird die aktuelle Spracheinstellung von Windows verwendet. In der Regel passt sich das Programm also automatisch an.

Wird keine passende DLL gefunden, kommt die beim Compilieren der Exe verwendete Sprache zur Anwendung.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 29. Jul 2023, 10:22
Hallo Uwe,
...
Fehlt dieser Eintrag wird die aktuelle Spracheinstellung von Windows verwendet. In der Regel passt sich das Programm also automatisch an.
ja, das stimmt.
Allerdings immer erst nach dem eigentlichen Start, nicht jedoch danach.

Zum Beispiel könnte man doch eine englische Ausgabe produzieren, die dann ein Franzose (der English
kann auf English stellen - während der Laufzeit).

Vielleicht könnte man auch ein Server-Programm schreiben, das 4 Monate mit einen Russen und weitere
4 Monate mit einen Deutschen betrieben werden kann, das ServerProgramm aber nicht neu gestartet
werden kann oder soll.

Unter Windows ist es natürlich einleuchtend, dass es 4 Monate wohl nicht überstehen wird, ohne einen
neuen Neustart - aber halt mal angenommen ...

Und warum sollten hier Tipps gegeben werden (himitsu), von denen man schon weiss, das diese nicht
funktionieren.
Das soll jetzt keine Beleidung sein.
Aber von Profis sollte man wohl mehr erwarten, als von mir als Neuling.

Gruß, paule
Frag doch einfach
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.731 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 29. Jul 2023, 10:45
Man sollte dabei aber auch zugute halten, dass zum einen Delphi 7 von den meisten hier schon seit vielen Jahren nicht mehr verwendet wird und zum anderen die Sprachunterstützung in Delphi auch nur von sehr wenigen genutzt wurde/wird. Insofern musst du wohl damit leben, dass du hier vermutlich oft nur noch theoretische Antworten bekommst, die im Wesentlichen auf vagen Erinnerungen oder den verfügbaren Dokumentationen beruht (die übrigens auch weit vor Erscheinen von Windows 10 erstellt wurden, das offiziell von Delphi 7 gar nicht unterstützt wird), weil es kaum einer hier ausprobieren kann oder will.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 29. Jul 2023, 11:07
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
Frag doch einfach
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 29. Jul 2023, 16:05
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.
Frag doch einfach
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.505 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 29. Jul 2023, 18:42
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jul 2023 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
371 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 30. Jul 2023, 10:27
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
Frag doch einfach
  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 12:52 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-2025 by Thomas Breitkreuz