Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datenmegen ausrechnen?!? (https://www.delphipraxis.net/125818-datenmegen-ausrechnen.html)

Tonic1024 12. Dez 2008 13:27


Datenmegen ausrechnen?!?
 
Hi...

Ich versuche mich grad daran einen VB Code nach Delphi zu übersetzen. Das klappt auch soweit ganz passabel bis ich an einem Punkt nicht weiterkomme.

Der Ausdruck:
Delphi-Quellcode:
Optional ByVal AppFlg As APPFLAGS = HASABOUT or HASPREFS
Wird als Parameter an eine Sub übergeben.

Aus APPFLAGS hab ich ein set gemacht.

Delphi-Quellcode:
 
type
  TApFlgs = (HASPREFS = 1, HASABOUT = 2);
  TAppFlags = set of TApFlgs;

procedure SetFlags(hWnd: HWND; Flags: TAppFlags = [HASPREFS, HASABOUT]);
jetzt will die SetProp Funktion aber einen Cardinal als Parameter haben.

Delphi-Quellcode:
  SetProp(hWnd, PChar('application'), Flags);
Hab ich mich mit dem verwenden einer Datenmenge nun selbst ausgesperrt oder kann man das umrechnen? Eigentlich muss ich die Einträge von Flags doch nur OR Verknüpfen, oder? Irgendwie steh ich auf dem Schlauch grad.


Über einen kurzen Gedankenstoß wär ich sehr Dankbar

Toni

3_of_8 12. Dez 2008 13:42

Re: Datenmegen ausrechnen?!?
 
Ord(Flags) oder einfach Cardinal(Flags) oder, falls es immer 32 Bit sein soll: LongInt(Flags)

Aber natürlich kann man es auch per Hand umrechnen:
Delphi-Quellcode:
var I: TApFlgs;
    Flags: TAppFlags;
    IntFlags: Cardinal;
begin
  IntFlags:=0;
  for I:=Low(TAppFlags) to high(TAppFlags) do
    if I in Flags then
      IntFlags:=IntFlags or (1 shl ord(I));
end;

Tonic1024 12. Dez 2008 13:54

Re: Datenmegen ausrechnen?!?
 
Da lande ich bei einem Problem, dass ich heut schon einige male hatte. Der mittlerweile einigermaßen angesäuerte Compiler meldet mir, dass die typen inkompatibel sind. Coursor steht bei "high(TAppFlags)"

Relicted 12. Dez 2008 13:59

Re: Datenmegen ausrechnen?!?
 
Juhu,


Zitat:

Zitat von Tonic1024
Hi...

Delphi-Quellcode:
 
procedure SetFlags(hWnd: HWND; Flags: TAppFlags = [HASPREFS, HASABOUT]);
jetzt will die SetProp Funktion aber einen Cardinal als Parameter haben.

Delphi-Quellcode:
  SetProp(hWnd, PChar('application'), Flags);

Gibst du uns auch noch die Richtige Funktion? Die Eine heißt SetProp die andere SetFlags... so lässt sich schlecht vergleichen :-)

Gruß
Reli

Tonic1024 12. Dez 2008 14:11

Re: Datenmegen ausrechnen?!?
 
Ob dus glaubst oder nicht... Das ist alles. Mehr gibts nicht. SetProp findest du unter F1 in der OH und SetFlags kapselt die mit dem standardwert 'application' nachdem geprüft wurde ob hWnd gültig ist.

Delphi-Quellcode:
procedure SetFlags(hWnd: HWND; Flags: TAppFlags = [HASPREFS, HASABOUT]);
begin
  if IsWindow(hWnd) then
    SetProp(hWnd, PChar('application'), Flags);
end.

Toni

DeddyH 12. Dez 2008 14:13

Re: Datenmegen ausrechnen?!?
 
Hast Du es mal versucht wie in #2 angedeutet? Also mit einem Cast nach LongInt?

Tonic1024 12. Dez 2008 14:38

Re: Datenmegen ausrechnen?!?
 
Jup, hab ich... Selbes Phänomen...

Ich hab den Code für die "Handarbeit" mal etwas mit gespielt und zum laufen gebracht.

De Ausdruck "[HASPREFS, HASABOUT]" ergibt nun aber 6. Kann das sein? Hätte ich, um meine erwartete 3 zu bekommen, im Type bei 0 anfangen müssen?

Wenns damit läuft soll es mir egal sein warum der Cast nicht funzt... Obwohls mich eigentlich schon interessiert. :roll:

Toni


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 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