Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Control in Abhängigkeit der Windowsversion verwenden (https://www.delphipraxis.net/106558-control-abhaengigkeit-der-windowsversion-verwenden.html)

OG Karotte 12. Jan 2008 18:57


Control in Abhängigkeit der Windowsversion verwenden
 
Hallo zusammen,

ist es möglich ein Control in Abhängigkeit der Windowsversion zu verwenden???

Die grundlegenden Eigenschaften sind identisch, nur erzeugt das Control unter Vista ein völlig anderes Verhalten als unter den vorherigen Windowsversionen. Daher suche ich nach einer (einfachen) Möglichkeit in Abhängigkeit von der OS-Version ein Control zu verwenden, ohne den kompletten Code quasi zweimal zu schreiben.

Beispiel:
Delphi-Quellcode:
var
  AControl: TObject;
begin
if WinVista then
  AControl := TSomeControl.Create(self)
else
  AControl := TAnotherControl.Create(self);

with AControl do begin
  // tue irgendwas
end;

Bernhard Geyer 12. Jan 2008 19:52

Re: Control in Abhängigkeit der Windowsversion verwenden
 
z.B. in der Jedi gibt es fertige Funktionen zum Auslesen der Windows Version und diverse Komponentensammlungen wie Elpack machen reichlich von Flags wie IsWinVistaUpper gebrauch.

OG Karotte 12. Jan 2008 21:27

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Zitat:

Zitat von Bernhard Geyer
z.B. in der Jedi gibt es fertige Funktionen zum Auslesen der Windows Version ...

Nun, das ist mir bekannt und habe ich auch schon verwendet. Was ich jedoch meinte / wissen möchte:

Wie kann ich ein Control in Abhängigkeit der OS Version verwenden ohne das der Compiler meckert.
Verwende ich zum Beispiel dieses hier:
Delphi-Quellcode:
var
  OpenDlg: TObject;

begin
if IsWinVista then
  OpenDlg := TFileOpenDialog.Create(self)
else
  OpenDlg := TTntOpenDialog.Create(self);

with OpenDlg do begin
  if WinVista then begin
    FavoriteLinks := [];
    FileTypes := [];
 end;

  DefaultExt := '*.txt';
  Options := [ofHideReadOnly, ofFileMustExist, ofShareAware, ofEnableSizing];
  Title := #246'ffnen';
...
dann meckert der Compiler, das er die Eigenschaften für dieses Objekt nicht kennt.
Nun geht es mir nicht allein um obiges Beispiel sondern möchte ich allg. wissen ob und wie so was geht.

Bernhard Geyer 12. Jan 2008 21:50

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Zitat:

Zitat von OG Karotte
Wie kann ich ein Control in Abhängigkeit der OS Version verwenden ohne das der Compiler meckert.
Verwende ich zum Beispiel dieses hier:

Wenn du eine Variable vom Typ TObject verwendest ist das kein Wunder.

Was stört dich den am TTntOpenDialog unter Vista? Wenns nur der neue Look ist solltest du mit dem Artikel von TMS das auch hinbekommen da man unter Vista "nur" einen Hook nicht setzen darfst (welche zum Zentrieren des Dialogs in der VCL verwendet wird)

OG Karotte 12. Jan 2008 22:26

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Zitat:

Zitat von Bernhard Geyer
Wenn du eine Variable vom Typ TObject verwendest ist das kein Wunder.

TObject müsste doch die oberste (oder unterste :gruebel: ) gemeinsame Klasse sein. Ich hatte gehofft, das man das dann irgendwie übereinander bringen könnte :( .

Zitat:

Zitat von Bernhard Geyer
Was stört dich den am TTntOpenDialog unter Vista?

Ich verwende die letzte, freie Version und da wird beim Aufruf anstelle von Öffnen der Speichern-Dialog angezeigt. Daher kam ich auf obige Idee, die ja vielleicht auch für andere Objekte nutzbar wäre. Nun geht es aber wohl doch nicht "so einfach" wie gedacht. Schade eigentlich.

Somit geht es also nur wenn beide Controls den gleichen unmittelbaren Vorfahren haben (Im Beispiel oben müsste das dann ja wohl TOpenDialog bzw. TFileOpenDialog sein) ???

Muetze1 12. Jan 2008 23:36

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Zitat:

Zitat von OG Karotte
Somit geht es also nur wenn beide Controls den gleichen unmittelbaren Vorfahren haben (Im Beispiel oben müsste das dann ja wohl TOpenDialog bzw. TFileOpenDialog sein) ???

Delphi-Referenz durchsuchenTCommonDialog?

OG Karotte 13. Jan 2008 09:12

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Zitat:

Zitat von Muetze1

Nope:
Code:
E2010 Inkompatible Typen: 'TCommonDialog' und 'TFileOpenDialog'

Muetze1 13. Jan 2008 14:16

Re: Control in Abhängigkeit der Windowsversion verwenden
 
Sorry, ich bin auch vom Standard Delphi-Referenz durchsuchenTOpenDialog ausgegangen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz