Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dummy-Konstanten (https://www.delphipraxis.net/4770-dummy-konstanten.html)

nailor 11. Mai 2003 13:45


Dummy-Konstanten
 
Ich will sowas machen:

Delphi-Quellcode:
procedure TuWas(Was: cardinal);
begin
case was of
1: ...
2: ...
3: ...
....
else
end;
end;
und jetzt will ich für 1,2,3... "Dummys" vergeben, also zb WAS_BEENDEN, WAS_DATEILADEN, WAS_NEUZEICHNEN... (so ähnlich wie bei den Windows WM_XXX - Messages). Wenn ich jetzt aber die Konstanten global deklariere, dann meckert delphi im case-Block immer noch, dass ihm das nicht konstant genug wäre....

sakura 11. Mai 2003 13:55

Häh? Wie hast Du die denn deklariert. Ich habe damit keine Probleme.

...:cat:...

nailor 11. Mai 2003 13:59

Code:
program bla;

uses
  Windows,
  Messages;

const
  MC_case1: cardinal = 0;
  MC_case2: cardinal = 1;
  MC_case3: cardinal = 2;

function MessageLoop(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
  lresult; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_DESTROY:
      PostQuitMessage(0);
    WM_CREATE:
      begin
        //nix bis jetzt
      end;
  else
    Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;

procedure mc(CodeNR: cardinal);
begin
case CodeNR of
  MC_case1: begin {irgendwas} end;
  MC_case2: begin {irgendwas} end;
  MC_case3: begin {irgendwas} end;
end;
end;

var
  WindowClass: TWndClassEx = (
    cbSize         : SizeOf(TWndClassEx);
    Style          : CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc    : @MessageLoop;
    cbClsExtra     : 0;
    cbWndExtra     : 0;
    hbrBackground  : COLOR_APPWORKSPACE;
    lpszMenuName   : nil;
    lpszClassName  : 'myClass';
    hIconSm        : 0;    );
  msg: TMsg;
begin
WindowClass.hInstance := hInstance;
WindowClass.hCursor   := LoadCursor(0, IDC_ARROW);
WindowClass.hIcon     := LoadIcon(0, IDI_APPLICATION);

RegisterClassEx(WindowClass);

CreateWindowEX(0, 'myClass', 'capt', WS_CAPTION or WS_VISIBLE,
                100, 100, 200, 125, 0, 0, hInstance, nil);

while GetMessage(msg,0,0,0) do
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
ExitCode := msg.wParam;
end.

sakura 11. Mai 2003 14:08

Das kommt noch aus der Zeit, als man über
Delphi-Quellcode:
const
  MC_case1: cardinal = 0;
  MC_case2: cardinal = 1;
  MC_case3: cardinal = 2;
Vordefinierte Variablen definiert hat. Obwohl da const steht, galt es früher als initialisierte Variable. Das ist Vergangenheit, dürfte sich aber als "heutiger Bug" manifestiert haben. Einfach die Defninitionen abändern in
Delphi-Quellcode:
const
  MC_case1 = 0;
  MC_case2 = 1;
  MC_case3 = 2;
, um das Cardinal künmmert sich Delphi, wenn nötig.

...:cat:...

nailor 11. Mai 2003 15:40

Tatsächlich. Klappt.


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