Wita,
Widze, że kAzek jest aktywny, ale jak ktoś z Was będzie wiedzial to proszę o podpowiedź. Bo w sumie nie jest mi aż tak bardzo to
potrzene, ale przydalo by się wiedzieć jak to zrobić. Otóż mam taki kod jak na http://www.speedyshare.com/files/26247978/host.rar
mniejsza o to czy pewne rzeczy da się zrobić w nim inaczej. Mi chodzi o taką funkcjonalnośc aby program dalo się zamknąc wciskając
Escape, a także wciskając Enter wywoływac button czyli w głownej procedurze obslugi okna dialogowego jest między innymi taki kod
WM_KEYDOWN :
begin
if wParam = VK_ESCAPE then
begin
SendMessage(AppHandle, WM_CLOSE, 0, 0);
end;
if (GetFocus = hCtlInputEdit) and (wParam = VK_RETURN)
and (IsWindowEnabled(hCtlConvertBtn) = True) then
begin
SendMessage(AppHandle, WM_COMMAND, IDC_CONVERTBTN, 0);
end;
end;
Jednak taki kod zadziała pod warunkiem, że obsłużymy komunikaty w taki sposób jak poniżej:
var
Msg : TMsg;
DlgH : HWND;
begin
DlgH := CreateDialog(hInstance, MAKEINTRESOURCE(IDC_TMAINFORM), 0, @MainDlgProc);
ShowWindow(DlgH, SW_SHOW);
while GetMessage(Msg, 0, 0, 0) do
begin
if Msg.Message = WM_KEYDOWN then
begin
SendMessage(AppHandle, Msg.Message, Msg.wParam, Msg.lParam);
end;
if IsDialogMessage(DlgH, Msg) = False then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
end.
I teraz problem polega na tym, że chccę pozbyć się belki programu z paska start, robiłem to już w kilku progrmaach
dzięk ipodpowiedzi kAZka, ktory doradzil aby w pliku zasobów z dialogiem zastosować taki wpis, no i to działa ale w
przypadku gdy okna wywołujemy kodem pokazanym pod sam koniec posta, ni jak inaczej nie umiem się pozbyć belki
w innym przypadku. A nie chcę robić tego przez SetWindowLong, bo okno bez belki ustawione stylem wygląda - jak
dla mnie brzydko, bo ma mały pasek tytułowy oraz mały przycisk do zamykania, a także na formatce rysowane jest
czasami jakies dziwne tło. Wiadomo w VCLu nie ma problemów bo operujemy na Application.Handle. Ale jak zrobić w
WinAPI to aby dialog obsługiwal Escape, na dowolnym elemencie a jednocześnie pozbyć się belki. PRoszę o pomco.
Sposób KAzka na ukrycie belki:
IDC_TAPPFORM DIALOGEX 0 0 0 0
WS_EX_TOOLWINDOW
FONT 8, "MS Sans Serif", 400, 0
{
}
Wywoływanie w ten sposób z dodatkowym kodem który jest powyżej nie ukrywa belki, może coś robię nie tak, ale co?
function HiddenDlgProc(hWnd : HWND; uMsg, wParam, lParam : Longint) : Bool; stdcall;
begin
Result := False;
case uMsg of
WM_CLOSE :
begin
EndDialog(hWnd, 0);
end;
WM_INITDIALOG :
begin
AppHandle := hWnd;
ShowWindow(AppHandle, SW_HIDE);
DialogBoxParamA(hInstance, MAKEINTRESOURCE(IDC_TMAINFORM), hWnd, @MainDlgProc, 0);
Result := True;
end;
end;
end;
var
Res : Integer;
begin
hInstance := GetModuleHandle(nil);
Res := DialogBoxParamA(hInstance, MAKEINTRESOURCE(IDC_TAPPFORM), 0, @HiddenDlgProc, 0);
ExitProcess(Res);
end.