Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   With Test do (https://www.delphipraxis.net/158716-test-do.html)

EWeiss 2. Mär 2011 12:07

AW: With Test do
 
Zitat:

Naja du musst ja der Create-Methode auch tatsächliche Parameter übergeben also ungefähr so:
Ja von außen nicht innerhalb der DLL..

Zitat:

Es sei denn du baust deine Funktion eben so um:
Ahhhhh... Das sieht schon anders aus.

So meckert der Compiler jedenfalls nicht mehr.

Danke werde mal versuchen diese jetzt von außen anzusprechen.
Muss ich da noch was besonderes berücksichtigen?

OK!
Export ist klar

Delphi-Quellcode:
export
SkinFrameButtonCreate
Und die Funktion muss jetzt in meiner API eingefügt werden.

Delphi-Quellcode:
function SkinFrameButtonCreate(hOwner: HWND; FullpathImageName: string; skLabel:
  PAnsiChar; x, y, xW, yH, ButID, StateMax: integer; Enabled: Boolean): ISkinFrameButton;
Sowie..

Delphi-Quellcode:
type
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
  end;
Das interface selbst.

Zitat:

Du kannst dann im Hauptprogramm NUR auf Methoden der Klasse zugreifen, die auch im Interface deklariert sind. Da dein Interface keine Methoden besitzt, wirst du mit dem zurückgelieferten Interface nichts anfangen können!
Ja sehe ich auch gerade ...
Ich brauche aber das Handle

müßte dann quasi nach dem erstellen das Handle zurückgeben

Delphi-Quellcode:
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    property Handle: HWND Read HFrameButton;
  end;
Das will der Compiler wieder nicht.
Zitat:

[Pascal Error] uFrameButton.pas(10): E2168 Field or method identifier expected

gruss

implementation 2. Mär 2011 12:42

AW: With Test do
 
Zitat:

Zitat von EWeiss (Beitrag 1085338)
Delphi-Quellcode:
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    property Handle: HWND Read HFrameButton;
  end;
Das will der Compiler wieder nicht.

Im Interface kannst du keine Felder nutzen.
Du brauchst eine Getter-Methode: GetHandle.
Delphi-Quellcode:
ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    function GetHandle: hWnd;
    property Handle: hWnd read GetHandle;
  end;

EWeiss 2. Mär 2011 13:02

AW: With Test do
 
Das muss den Namen "GET" vorangesetzt haben?

so geht es nicht?

Delphi-Quellcode:
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    function HFrameButton: hWnd;
    property Handle: HWND Read HFrameButton;
  end;
gruss

Neutral General 2. Mär 2011 13:03

AW: With Test do
 
Delphi-Quellcode:
type
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    function GetHandle: hWnd;
    property Handle: hWnd read GetHandle;
  end;

  TSkinFrameButton = class(TInterfacedObject, ISkinFrameButton)
  private
    HFrameButton: Hwnd;
    function GetHandle: Hwnd;
  end;

implementation
 
function TSkinFrameButton.GetHandle: Hwnd;
begin
  Result := HFrameButton;
end;

EWeiss 2. Mär 2011 13:05

AW: With Test do
 
Zitat:

Zitat von Neutral General (Beitrag 1085362)
Delphi-Quellcode:
type
  ISkinFrameButton = interface
    ['{810D9186-F618-4EE6-84C3-054CDBAE1496}']
    function GetHandle: hWnd;
    property Handle: hWnd read GetHandle;
  end;

  TSkinFrameButton = class(TInterfacedObject, ISkinFrameButton)
  private
    HFrameButton: Hwnd;
    function GetHandle: Hwnd;
  end;

implementation
 
function TSkinFrameButton.GetHandle: Hwnd;
begin
  Result := HFrameButton;
end;

Fantastisch ihr seid richtig lieb zu mir heute ;)
Hab doch erst in 2 Tagen Geburtstag.. und werd 53 :cry:

Danke an alle.
Ich hoffe das ich jetzt damit klarkomme.

gruss

EWeiss 2. Mär 2011 13:38

AW: With Test do
 
tschuldigung wenn ich pusche :duck:

Habe es jetzt soweit das es compiliert aber leider kommt nichts an.
Symbole werden eleminiert vom linker.

Delphi-Quellcode:
procedure AddChildControls(hMain: HWND);
var
  BackgoundFrame : ISkinFrameButton;
begin
    BackgoundFrame := CTRL_FrameButtonCreate(hMain, SKAERO_FOLDER +
      'Panel.png', '', 13, 41, XMIN_SIZE - 26, YMIN_SIZE - 55, ID_AEROBUTTON, 0, False);
    SKAERO_SetAnchorMode(BackgoundFrame.Handle, ANCHOR_HEIGHT_WIDTH);
    SKAERO_SetZorder(BackgoundFrame.Handle, HWND_BOTTOM);
end;
was sollte da jetzt noch falsch sein.
Der Skinfolder wird richtig übergeben aber im weiteren verlauf eleminiert.

Zitat:

Name Value
hOwner Symbol was eliminated by linker
FullpathImageName Symbol was eliminated by linker
skLabel Symbol was eliminated by linker
x 41
y 774
xW 545
yH 56
ButID 0
StateMax 0
Enabled True
Alle ergebnisse stimmen nicht.

EDIT:
Hat sich erledigt habe den Fehler gefunden.
Bei der Übergabe in meiner API Unit habe ich den stdcal vergessen..
während er in der DLL vorhanden war.

trotzdem frage ich mich was wohl besser wäre für Interface übergaben
ist stdcal OK?


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
Seite 2 von 2     12   

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