Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Button anklicken bei WM_CREATE (https://www.delphipraxis.net/64821-button-anklicken-bei-wm_create.html)

DevilsCamp 8. Mär 2006 15:59


Button anklicken bei WM_CREATE
 
Ich habe ein Programm, das rein mit API geschrieben ist.
Diesem Programm kann ich beim Start Parameter übergeben.

Hat nun einer dieser einen bestimmten Wert, so möchte ich, dass ein bestimmter Button angeklickt wird. Also im Grunde das OnClick-Ereignis, wenn ich mit VCL programmiert hätte.

Ich benutze folgenden Code beim behandeln der WM_CREATE-Message:
Delphi-Quellcode:
             
if (UpperCase(ParamStr(i))='START') then
begin
  x := (BN_CLICKED * (High(Word)+1))+IDC_BSTART;
  SendMessage(hwndHauptfenster, WM_COMMAND, x, 0)
end;
Doch leider kommt diese Nachricht nie beim Hauptfenster an.

Ich habe es auch schon bei WM_ACTIVATE versucht...

MathiasSimmack 8. Mär 2006 16:08

Re: Button anklicken bei WM_CREATE
 
Zitat:

Zitat von DevilsCamp
Delphi-Quellcode:
x := (BN_CLICKED * (High(Word)+1))+IDC_BSTART;

MSDN-Library durchsuchenMAKEWPARAM macht das gleiche, und es sieht im Quellcode gefälliger aus. Und da du bei einem API-Programm eh die Windows-Unit einbaust, kannst du das Makro bzw. die Funktion auch nutzen.

DevilsCamp 8. Mär 2006 16:12

Re: Button anklicken bei WM_CREATE
 
hmm
Interessant. Man lernt nie aus...


Aber mein Problem löst es trotzdem nicht :(

MathiasSimmack 8. Mär 2006 16:17

Re: Button anklicken bei WM_CREATE
 
Bei mir schon. Ich habe mal eben aus den allseits bekannten Win32-API-Tutorials das normale Button-Sample entpackt und die WM_CREATE-Anweisung am Schluss um
Delphi-Quellcode:
SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(IDC_BMPBUTTON, BN_CLICKED), 0);
ergänzt. Da begrüßte mich beim Start des Programms die "Schick, oder?"-Box. :stupid:

KingIR 8. Mär 2006 17:38

Re: Button anklicken bei WM_CREATE
 
Ansonsten böte sich u.U. auch noch BM_CLICK an :shock:

Delphi-Quellcode:
SendMessage(hWnd, BM_CLICK, 0, 0);

DevilsCamp 10. Mär 2006 07:26

Re: Button anklicken bei WM_CREATE
 
So ich habe herausgefunden, warum es nicht ging:

Ich habe ein Array, in dem ich alle Handles aller Fenster speichere, die ich erstelle.
Das Hauptfenster erstelle ich so:
Delphi-Quellcode:
handlearray[0] := CreateWindowEx()
Und in der WM_CREATE-Message-Behandlung verwende ich handlearray[0] als Handle des Ziel-Fensters für den simulierten Button-Klick (habe den Code, den ich gepostet hatte leicht abgewandelt, da ich dachte, es sei nicht von Bedeutung).
Da aber handlearray[0] erst dann einen Wert bekommt NACHDEM das Hauptfenster erstellt wurde, also zum Zeitpunkt WM_CREATE irgendeinen Wert hat, wird die Nachricht irgendwohin gesendet, nur nicht an mein eigenes Fenster. Ich habe inzwischen als Handle den Wert genommen, der bei meiner Fenster-Prozedur als Parameter übergeben wird. Und schon funktioniert es so, wie ich es mir wünsche :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.

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