Forma na ?żywca...

0

Czy może ktoś mnie naprowadzić na jakieś informacje
dotyczące robienia formy w aplikacji bez formy, tak
na żywca, no wiecie program begin end, jakieś kursy może
albo przykłady ? Chodzi o to że to jest tak trochę inaczej
niż jak się ma gotową formę i F1 mnie często zawodzi,
co rusz procedury odwołują się do external user32 i mnÓstwo
tych komunikatów, zna ktoś coś przystępnego ?

0

Robienie formy bez formy ??

Chyba chodzi Ci o utworzenie okna bez TForm.
Zajrzyj do MSDN i poczytaj opis CreateWindow, CreateWindowEx, WNDCLASS, RegisterClass, WindowProc .......

Poszukaj w Internecie książki Charlesa Petzolda Programming Windows

0

zna ktoś coś przystępnego ?

To zależy :-)
Polecam tutoriale nr 3 i 10 ze strony http://spiff.tripnet.se/~iczelion/tutorials.html.
To tyczy się Assemblera, ale przeczytaj chociaż wstęp-opis.

0

no nic... dzięki, rozumiem że nie mam co liczyć na przystępny
kursik po polsku :-D

0

No dobra, mam teraz problem, poskładałem co chciałem
z jaichś źródeł i takich tam no i nic z tego nie rozumiem
jak zwykle, mam trzy pytania:

  1. Jak to zamknąć po 10 sekundach, ale tak po ludzku ?
  2. Dlaczego jak tak to skompiluje z 10 razy to mi pasek startu znika ?
  3. No i w ogóle jak by ktoś mógł wypisać co jest nie potrzebne, co jest źle itp... ?

program Crypter;

uses
Messages, Classes, Windows, SysUtils;

{$R *.RES}

type
TWatek = class(TThread)
protected
procedure Execute; override;
end;

var
WClass: TWndClass;
Handle, Label1, Font1: HWND;
Msg: TMsg;
Watek: TWatek;

procedure TWatek.Execute;
var
i : Integer;
begin
i := 10;
FreeOnTerminate := True;
while i > 0 do
begin
SetWindowText(Label1, PChar(IntToStr(i)));
i := i - 1;
Sleep(1000);
end;
// tu chce zamknąć poprawnie program
end;

function WndProc(HWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
end
else
Result := DefWindowProc(HWnd,Msg,WParam,LParam);
end;
end;

begin

with WClass do begin
style := CS_PARENTDC;
lpfnWndProc := @WndProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := SysInit.HInstance;
hIcon := LoadIcon(HInstance, IDI_APPLICATION);
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := nil;
lpszClassName:= 'Crypter';
end;

RegisterClass(WClass);

Handle := CreateWindow('Crypter', 'Crypter', WS_OVERLAPPED or
WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX or WS_VISIBLE,
10, 10, 209, 124, 0, 0, HInstance, nil);

Label1 := CreateWindow('Static','bla bla',
//dlaczego jak nie wpisze static to nie widać tekstu ?
WS_VISIBLE or WS_CHILD or SS_LEFT,
8, 8, 175, 13, Handle, 0, HInstance, nil);

Font1 := CreateFont(-12, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE,
'MS Sans Serif');

SendMessage(Label1, WM_SETFONT, Font1, 0);

ShowWindow(Handle, SW_NORMAL);
UpdateWindow(Handle);

Watek := TWatek.Create(false);

while GetMessage(Msg, 0, 0, 0) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;

end.

0

ad.1)
to daj:

H:=FindWindow('Crypter',nil);
PostMessage(H,WM_QUIT,0,0);

P.S
Próbowałem PostQuitMessage(0); ale coś nie szło
a i H jako HWND

0

Application.ShowMainForm:=False;{ niewyświetla formy po starcie programu }

Wpisz to w pliku *.dpr projektu.

0

<font color="green">Application.ShowMainForm:=False;{ niewyświetla formy po starcie programu }

Wpisz to w pliku *.dpr projektu.</span>

tak ,ale sęk w tym że on to pisze w API :) Żeby Application.ShowMainForm:=False zadzialalo to trza dożucić do uses Forms

0

H:=FindWindow('Crypter',nil);
PostMessage(H,WM_QUIT,0,0);

dzięki :) <font color="red">chociaŻ</span> zastanwia mnie dlaczego jeśli
zamist H podałem prawdziwy Handle głownego
okna to mi się nawet Delphi zamknął :-D [???]

[b][dopisane][/b]

dodam jeszcze że to się zamyka ładnie pod w2k ale pod w98
powoduje wyjątek krytyczny, co jest nie tak ?
nie mam już siły, a prawie wszystko działało ;-(

0

<font color="green">dodam jeszcze że to się zamyka ładnie pod w2k ale pod w98
powoduje wyjątek krytyczny, co jest nie tak ?
nie mam już siły, a prawie wszystko działało
</span>

o to nie mam pojęcia ja mam Win98 i ten kodzik pod nim testowałem i wszycho jest cacy.

0

o to nie mam pojęcia ja mam Win98 i ten kodzik pod nim testowałem i wszycho jest cacy.

hmmm... dziwna sprawa, nie wiem czy coś pozmieniałem czy co
jak chcesz to tu mam http://piechnat.iglu.cz/crypter.zip
no i zauważyłem że jak tam wstawie Halt to wtedy nie ma problemów
pod w98 ale nie wiem czy to jest poprawne, co właściwie robi Halt
czy tak można zamykać programy ?

0

no tak wyjątek krytyczny ale tylko wtedy jak dałeś:

<font color="green">SendMessage(FindWindow('Crypter', nil), WM_CLOSE, 0, 0); </span>

a ja zrobiłem to przez:
<font color="green">
H:=FindWindow('Crypter',nil);
PostMessage(H,WM_QUIT,0,0);</span>

i nic sie nie dzieje, poprawnie zamyka :-P

0

i nic sie nie dzieje, poprawnie zamyka :-P

w PHP czy JS to by nie miało żadnego znaczenia :p
dzięki, nigdy bym na to nie wpadł [glowa]

1 użytkowników online, w tym zalogowanych: 0, gości: 1