AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Delphi-Versionsnummer per IOTA-Service abfragen?

Delphi-Versionsnummer per IOTA-Service abfragen?

Ein Thema von r29d43 · begonnen am 18. Mär 2021 · letzter Beitrag vom 19. Mär 2021
Antwort Antwort
Seite 2 von 2     12
r29d43

Registriert seit: 18. Jan 2007
276 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Delphi-Versionsnummer per IOTA-Service abfragen?

  Alt 19. Mär 2021, 09:20
@himitsu
Das würde ich ja auch liebend gerne so machen, nur habe ich bzgl. der IOTA-Services noch keinen Weg dazu gefunden. Zumal ich ja bzgl. dieser IOTA-Dingens auch noch ziemlich am Anfang bin. Das werde ich dann etwas später schon genau so machen, wenn ich mich mal ein bisschen in diese OpenToolsApi reingewühlt habe. Im Augenblick komme ich aber so schneller voran.


Allerdings, wenn wir eh schon gerade dabei sind, wäre die Frage ansonsten gewesen: Gibt es eine Möglichkeit mittels der IOTA-Services die exakte Position (in Pixel auf dem Screen) des ersten Chars des Quellcodes (also quasi der in Columne 1) festzustellen? Bzw. die Breite festzustellen, zwischen dem linken Rand des Editors (im Zweifel habe ich die Handle des Windows, in dem diese Editoren immer drinliegen (=TEditControl), und kann somit dessen Position per GetWindowPos ermitteln) und dem ersten Char im Editor. Das ist also der Bereich, indem diese Debuggerhaltepunkte eingezeichnet werden oder auch die Zeilennummern. Denn dieser Bereich ist zufälligerweise zwischen Delphi 10.4.1 u. 10.4.2 unterschiedlich breit.


@stahli, danke, auf so einen o.ä. Tipp hätte ich dann gehofft, wenn ich diese Frage dann speziell zur Beseitigung dieses Problems irgendwann später mal gestellt hätte. Ich werde mir das natürlich mal etwas genauer ansehen (habe heute aber leider keine richtige Zeit mehr dazu).
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
956 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Delphi-Versionsnummer per IOTA-Service abfragen?

  Alt 19. Mär 2021, 09:22
GExperts führt dazu eine Liste der Versionsinfos diverser Executables und BPLs. Die wird benutzt, um diverse Bugs / Features einzelner Updates zu umschiffen. Unit GX_GetIdeVersion im Unterverzeichnis source\framework.

Sieht dann z.B. so aus:

Delphi-Quellcode:
{
  Delphi 10.4 Sydney
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.37889.9797
  coreide270.bpl      27.0.37889.9797
  bds.exe              27.0.37889.9797
  dcldb270.bpl        27.0.37889.9797

  Patch1 and Patch2 apparently did not change any of these versions and even those files
  the patches replaced still have the same version as the original files. WTF?

  Delphi 10.4.1 Sydney Update 1
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.38860.1461
  coreide270.bpl      27.0.38860.1461
  bds.exe              27.0.38860.1461
  dcldb270.bpl        27.0.38860.1461

  Delphi 10.4.2 Sydney Update 2
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.40680.4203
  coreide270.bpl      27.0.40680.4203
  bds.exe              27.0.40680.4203
  dcldb270.bpl        27.0.40680.4203
}


function GetRS104Version: TBorlandIdeVersion;
const
  RegKey = 'Software\Embarcadero\BDS\21.0\CatalogRepository\Elements\10.4Patch2pro-10';
  CoreIde2700: TVersionNumber = (Minor: 27; Major: 0; Build: 9797; Release: 37829);
  CoreIde2700UPd1: TVersionNumber = (Minor: 27; Major: 0; Build: 1461; Release: 38860);
  CoreIde2700UPd2: TVersionNumber = (Minor: 27; Major: 0; Build: 4203; Release: 40680);
var
  RegValue: Integer;
  CoreIdeFileVersion: TVersionNumber;
begin
  CoreIdeFileVersion := GetFileVersionNumber(GetIdeRootDirectory + 'Bin\coreide270.bpl');

  if CompareVersionNumber(CoreIdeFileVersion, CoreIde2700UPd2) >= 0 then begin
    Result := ideRS104U2;
  end else if CompareVersionNumber(CoreIdeFileVersion, CoreIde2700UPd1) >= 0 then begin
    Result := ideRS104U1;
  end else begin
    // There was patch 2 for 10.4.0 which broke StringGrids in a new way
    // so we have to detect it.
    RegValue := TRegistry_ReadInteger(RegKey, 'Installed', 0, HKEY_CURRENT_USER);
    if RegValue <> 0 then
      Result := ideRS104P2
    else
      Result := ideRS104;
  end;
end;
In der Regel reicht es, wenn man CoreIde prüft, aber bei einigen älteren Versionen wurden durch ein Update / Patch nur einzele wichtige Dateien geändert, so dass man gezielt diese prüfen muss.
Thomas Mueller

Geändert von dummzeuch (19. Mär 2021 um 09:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.842 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#13

AW: Delphi-Versionsnummer per IOTA-Service abfragen?

  Alt 19. Mär 2021, 18:48
Gibt es eine Möglichkeit mittels der IOTA-Services die exakte Position (in Pixel auf dem Screen) des ersten Chars des Quellcodes (also quasi der in Columne 1) festzustellen? Bzw. die Breite festzustellen, zwischen dem linken Rand des Editors und dem ersten Char im Editor.
Ja, der Bereich nennt sich "Gutter".

Delphi-Quellcode:
function GetEditorServices: IOTAEditorServices;
begin
  Result := BorlandIDEServices as IOTAEditorServices;
  Assert(Assigned(Result));
end;

function GetTopMostEditView: IOTAEditView;
begin
  Result := GetEditorServices.TopView;
end;

function GetEditor: TWinControl;
var
  view: IOTAEditView;
begin
  view := GetTopMostEditView;
  Result := TWinControl(view.GetEditWindow.Form.FindComponent('Editor'));
end;

function GetGutterWidth: Integer;
var
  editor: TWinControl;
  ctx: TRttiContext;
begin
  editor := GetEditor;
  Result := ctx.GetType(editor.ClassType).GetProperty('LeftGutter').GetValue(editor).AsInteger;
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Mär 2021 um 18:50 Uhr)
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
276 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Delphi-Versionsnummer per IOTA-Service abfragen?

  Alt 19. Mär 2021, 21:28

Ja, der Bereich nennt sich "Gutter".

Delphi-Quellcode:
function GetEditorServices: IOTAEditorServices;
begin
  Result := BorlandIDEServices as IOTAEditorServices;
  Assert(Assigned(Result));
end;

function GetTopMostEditView: IOTAEditView;
begin
  Result := GetEditorServices.TopView;
end;

function GetEditor: TWinControl;
var
  view: IOTAEditView;
begin
  view := GetTopMostEditView;
  Result := TWinControl(view.GetEditWindow.Form.FindComponent('Editor'));
end;

function GetGutterWidth: Integer;
var
  editor: TWinControl;
  ctx: TRttiContext;
begin
  editor := GetEditor;
  Result := ctx.GetType(editor.ClassType).GetProperty('LeftGutter').GetValue(editor).AsInteger;
end;

Oberperfekt! Genau das was ich später dann gesucht hätte und jetzt schon gefunden habe

Besten Dank auch nochmal @all

Geändert von r29d43 (19. Mär 2021 um 21:38 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf