Spis treści:
1. Kilka warunków na raz
2. Hasło co i jak?
3. Edytowanie komponentu w kodzie
4. Jak dodać link do programu?
5. Jak zrobić minimalizację do traya?
6. Robimy przeglądarkę internetową
7. Ingerencja w pamięć aplikacji (Integer)
Tuty:
1. Kilka warunków na raz
KOD
Jeżeli mamy 3 hasła i musimy wpisać jedno z nich do edita, kod będzie wyglądał tak:
if (edit1.text='haslo1') or (edit1.text='haslo2') or (edit1.text='haslo3')
then
showmessage('Dobre haslo')
else
showmessage('Zle haslo');
Jeżeli jednak chcemy, aby każdy z 3 editów, miał jakąś treść dajemy AND zamiast OR
np.:
if (edit1.text='haslo1') and (edit2.text='haslo2')
then
showmessage('obydwa hasła się zgadzają')
else
showmessage('któreś z haseł jest złe');
if (edit1.text='haslo1') or (edit1.text='haslo2') or (edit1.text='haslo3')
then
showmessage('Dobre haslo')
else
showmessage('Zle haslo');
Jeżeli jednak chcemy, aby każdy z 3 editów, miał jakąś treść dajemy AND zamiast OR
np.:
if (edit1.text='haslo1') and (edit2.text='haslo2')
then
showmessage('obydwa hasła się zgadzają')
else
showmessage('któreś z haseł jest złe');
2. Hasło co i jak
KOD
Zrobimy proste hasełko.
Forma prosta:
Na 1szej formie dajemy
edit1,button1
Klikamy dwa razy button1 i wpisujemy:
if
edit1.text<>'hasło'
then
form1.close {to tylko przykładowa akcja}
else begin
form1.hide;
form2.show; {to tylko przykładowa akcja}
Forma zaawansowana:
Na formie1 i innych formach umieszczamy projekt. Załóżmy, że na formie 2 ma być hasło. Robimy procedurę jak wcześniej, z tym, że:
Do OnCreate formy nr. 2 dajemy:
form2.showmodal;
Do OnCloseQuery formy nr. 2 dajemy:
application.terminate;
teraz hasła nie da się ominąć.
Ciekawostki:
-Jeżeli robimy program na cd-key, warto jest zapisywać cd-key do pliku ini, a potem wczytywać go przy starcie programu. Wtedy także zawsze trzeba go sprawdzać. Jeżeli jednak program nie znalazł cd-keya/jest on zły, można dać akcję pojawienia się okna rejestracji.
-Hasło można znaleźć edytując program w hexach (raz, że nie zawsze, a dwa, że trzeba trochę umieć).
-Jeżeli chcesz, aby hasło było bez buttona i samo się aktywowało, dajemy akcję do timera z 1 milisekundowym intervalem. Pamiętaj aby nie dawać Else, ponieważ timer będzie wywalał milion błędów
Forma prosta:
Na 1szej formie dajemy
edit1,button1
Klikamy dwa razy button1 i wpisujemy:
if
edit1.text<>'hasło'
then
form1.close {to tylko przykładowa akcja}
else begin
form1.hide;
form2.show; {to tylko przykładowa akcja}
Forma zaawansowana:
Na formie1 i innych formach umieszczamy projekt. Załóżmy, że na formie 2 ma być hasło. Robimy procedurę jak wcześniej, z tym, że:
Do OnCreate formy nr. 2 dajemy:
form2.showmodal;
Do OnCloseQuery formy nr. 2 dajemy:
application.terminate;
teraz hasła nie da się ominąć.
Ciekawostki:
-Jeżeli robimy program na cd-key, warto jest zapisywać cd-key do pliku ini, a potem wczytywać go przy starcie programu. Wtedy także zawsze trzeba go sprawdzać. Jeżeli jednak program nie znalazł cd-keya/jest on zły, można dać akcję pojawienia się okna rejestracji.
-Hasło można znaleźć edytując program w hexach (raz, że nie zawsze, a dwa, że trzeba trochę umieć).
-Jeżeli chcesz, aby hasło było bez buttona i samo się aktywowało, dajemy akcję do timera z 1 milisekundowym intervalem. Pamiętaj aby nie dawać Else, ponieważ timer będzie wywalał milion błędów
3. Edytowanie komponentu w kodzie
KOD
No więc macie np. w komponencie w object inspectorze nick.
Załóżmy, że:
Komponent - thgg
funkcja - port
Program ma ustawiony domyślnie port na załóżmy 1234. W trakcie działania programu chcemy go zmienić na 4321. Kod będzie wyglądał następująco:
thgg.port:=4321;
Przykłady dla innych komponentów:
edit1.font.color:=clblue;
label4.caption:='tekst'
label1.caption:=edit2.text;
edit1.text:=timer1.interval;
timer1.interval:=1000;
Załóżmy, że:
Komponent - thgg
funkcja - port
Program ma ustawiony domyślnie port na załóżmy 1234. W trakcie działania programu chcemy go zmienić na 4321. Kod będzie wyglądał następująco:
thgg.port:=4321;
Przykłady dla innych komponentów:
edit1.font.color:=clblue;
label4.caption:='tekst'
label1.caption:=edit2.text;
edit1.text:=timer1.interval;
timer1.interval:=1000;
4. Jak dodać link do programu?
KOD
Na formę wrzucamy labela i nadajemy mu caption 'jakaś strona'.
Klikamy na niego 2 razy i wrzucamy:
ShellExecute(Handle, 'open', pchar('www.mpcforum.pl'), nil, nil, SW_SHOWMAXIMIZED);
Ale niektórzy się nie domyślą, że to link. Tak więc zmieniamy kolor na fioletowy, dajemy podkreślenie i ostatecznie zmieniamy kursor po najechaniu na łapkę (wszystko w object inspector) i gotowe!
Klikamy na niego 2 razy i wrzucamy:
ShellExecute(Handle, 'open', pchar('www.mpcforum.pl'), nil, nil, SW_SHOWMAXIMIZED);
Ale niektórzy się nie domyślą, że to link. Tak więc zmieniamy kolor na fioletowy, dajemy podkreślenie i ostatecznie zmieniamy kursor po najechaniu na łapkę (wszystko w object inspector) i gotowe!
5. Jak zrobić minimalizację do traya?
KOD
NEW KOMPONENT: COOLTRAYICON (w google)
Dajemy na formę button i wrzucamy na OnClick:
CoolTrayIcon1.IconVisible:=true;
form1.hide;
Teraz dajemy cooltrayicon i w object inspector dajemy iconvisible na false.
W onclick cooltray~ dajemy:
Form1.show;
cooltrayicon1.iconvisible:=false;
Pamiętajcie, że musicie załadować do cooltray~ wcześniej ikonę!
Dajemy na formę button i wrzucamy na OnClick:
CoolTrayIcon1.IconVisible:=true;
form1.hide;
Teraz dajemy cooltrayicon i w object inspector dajemy iconvisible na false.
W onclick cooltray~ dajemy:
Form1.show;
cooltrayicon1.iconvisible:=false;
Pamiętajcie, że musicie załadować do cooltray~ wcześniej ikonę!
6. Robimy przeglądarkę internetową
KOD
Z góry uprzedzam, że nasza przeglądarka będzie prawie jak IE.
No więc tak. Najpierw będzie nam potrzebny komponent.
Klikamy: Component->Import ActiveX control...
Teraz znajdujemy na liście Microsoft internet Controls (version 1.1)
Zaznaczamy i klikamy install. Instalujemy komponent i restartujemy delphi.
1. Otwarcie strony
Wybieramy panel z zakładki Standard i dajemy go na formę.
W object inspectorze kasujemy Caption i ustawiamy Align na AlTop.
Dodajemy na panelu pierwszy przycisk. Jego caption ustawiamy na "Otwórz".
Klikamy na niego dwa razy i wpisujemy:
WebBrowser1.Navigate(Edit1.Text);
Teraz dajemy na panel edit z zakładki Standard i usuwamy jego tekst.
Ostatnim punktem jest dodanie timera z intervalem na 1 i dodanie mu kodu:
Edit1.Text:= WebBrowser1.LocationURL;
Gdy przyciśniemy przycisk, strona podana w edit1 zostanie wyświetlona.
2. Przyciski odśwież, wstecz, dalej itd.
Dajemy na formę kolejny panel i ustawiamy jego Align na AlTop.
Dajemy tam przyciski:
-Odśwież
webbrowser1.Refresh;
-Wstecz
webbrowser1.GoBack;
-Dalej
webbrowser1.GoForward;
-Stop
webbrowser1.Stop;
Gdy naciśniemy jeden z przycisków program wykona akcję w zależności od przycisku, który naciskamy.
3. Ulubione
Dajemy kolejny panel i kasujemy caption.
Jego Align ustawiamy na AlLeft.
Umieszczamy na nim 2 panele bez caption. Oba mają ustawione Align na Altop.
Na pierwszym panelu Dajemy duży napis "Ulubione", a na drugim umieszczamy:
-Edit
-Label (caption - dodaj do ulubionych)
-Button (caption - dodaj).
Teraz na naszym głównym panelu dajemy listbox i ustawiamy jego Align na AlClient.
Klikamy 2 razy na przycisk "Dodaj" i wpisujemy:
listbox1.Items.Add(edit2.text);
ListBox1.Items.SaveToFile('ulubione.cfg');
Klikamy dwa razy na naszą listę i wpisujemy:
WebBrowser1.Navigate(ListBox1.Items.Text);
Klikamy w wolne miejsce formy i w zdarzenie OnCreate wpisujemy:
Listbox1.items.LoadFromFile('ulubione.cfg);
Teraz ustawiamy w Object Inspectorze panela visible na false.
4. Historia
Tworzymy nowy panel i jego Align ustawiamy na AlRight.
Dodajemy dwa panele. Na jednym dajemy napis "Historia", a na drugim dajemy drugiego listboxa.
Align panela z napisem = AlTop
Align panela z listą = Alclient
Klikamy dwa razy na listę i wpisujemy:
WebBrowser1.Navigate(ListBox2.Items.Text);
Teraz dopisujemy do kodu buttona "Otwórz":
listbox1.Items.Add(edit1.text);
Wreszcie ustawiamy panel historii visible - false.
5. Strony
No to najważniejsze. Dajemy komponent WebBrowser z zakładki ActiveX na pozostałe miejsce formy. Jego Align ustawiamy na AlClient. Teraz możemy odpalić przeglądarkę.
6. Menu
Wstawiamy na formę komponent MainMenu z zakładki standard.
Klikamy na niego dwa razy i możemy edytować menu.
Ustawiamy je tak:
1) Plik
-Wstecz
-Dalej
-Odświerz
-Stop
-Zakończ
każdemu z nich w object inspectorze w OnClick w menu rozwijalnym nadajemy własności buttonów. Np.: Wstecz - OnClick - button3
Przyciskowi "Zakończ" dajemy kod:
application.terminate;
2) Widok
-Ulubione
-Historia
Zdarzenie OnClick "ulubione" :
if Panel4.visible=True
then
Panel4.Visible:=False
else
Panel4.Visible:=True;
Zakładając oczywiście, że Ulubione to panel 4.
Podobnie robimy z historią.
7. Koniec
I tak kończymy ten wyczerpujący tutorial. Możecie oczywiście dodać coś swojego do przeglądarki. Żegnam.
No więc tak. Najpierw będzie nam potrzebny komponent.
Klikamy: Component->Import ActiveX control...
Teraz znajdujemy na liście Microsoft internet Controls (version 1.1)
Zaznaczamy i klikamy install. Instalujemy komponent i restartujemy delphi.
1. Otwarcie strony
Wybieramy panel z zakładki Standard i dajemy go na formę.
W object inspectorze kasujemy Caption i ustawiamy Align na AlTop.
Dodajemy na panelu pierwszy przycisk. Jego caption ustawiamy na "Otwórz".
Klikamy na niego dwa razy i wpisujemy:
WebBrowser1.Navigate(Edit1.Text);
Teraz dajemy na panel edit z zakładki Standard i usuwamy jego tekst.
Ostatnim punktem jest dodanie timera z intervalem na 1 i dodanie mu kodu:
Edit1.Text:= WebBrowser1.LocationURL;
Gdy przyciśniemy przycisk, strona podana w edit1 zostanie wyświetlona.
2. Przyciski odśwież, wstecz, dalej itd.
Dajemy na formę kolejny panel i ustawiamy jego Align na AlTop.
Dajemy tam przyciski:
-Odśwież
webbrowser1.Refresh;
-Wstecz
webbrowser1.GoBack;
-Dalej
webbrowser1.GoForward;
-Stop
webbrowser1.Stop;
Gdy naciśniemy jeden z przycisków program wykona akcję w zależności od przycisku, który naciskamy.
3. Ulubione
Dajemy kolejny panel i kasujemy caption.
Jego Align ustawiamy na AlLeft.
Umieszczamy na nim 2 panele bez caption. Oba mają ustawione Align na Altop.
Na pierwszym panelu Dajemy duży napis "Ulubione", a na drugim umieszczamy:
-Edit
-Label (caption - dodaj do ulubionych)
-Button (caption - dodaj).
Teraz na naszym głównym panelu dajemy listbox i ustawiamy jego Align na AlClient.
Klikamy 2 razy na przycisk "Dodaj" i wpisujemy:
listbox1.Items.Add(edit2.text);
ListBox1.Items.SaveToFile('ulubione.cfg');
Klikamy dwa razy na naszą listę i wpisujemy:
WebBrowser1.Navigate(ListBox1.Items.Text);
Klikamy w wolne miejsce formy i w zdarzenie OnCreate wpisujemy:
Listbox1.items.LoadFromFile('ulubione.cfg);
Teraz ustawiamy w Object Inspectorze panela visible na false.
4. Historia
Tworzymy nowy panel i jego Align ustawiamy na AlRight.
Dodajemy dwa panele. Na jednym dajemy napis "Historia", a na drugim dajemy drugiego listboxa.
Align panela z napisem = AlTop
Align panela z listą = Alclient
Klikamy dwa razy na listę i wpisujemy:
WebBrowser1.Navigate(ListBox2.Items.Text);
Teraz dopisujemy do kodu buttona "Otwórz":
listbox1.Items.Add(edit1.text);
Wreszcie ustawiamy panel historii visible - false.
5. Strony
No to najważniejsze. Dajemy komponent WebBrowser z zakładki ActiveX na pozostałe miejsce formy. Jego Align ustawiamy na AlClient. Teraz możemy odpalić przeglądarkę.
6. Menu
Wstawiamy na formę komponent MainMenu z zakładki standard.
Klikamy na niego dwa razy i możemy edytować menu.
Ustawiamy je tak:
1) Plik
-Wstecz
-Dalej
-Odświerz
-Stop
-Zakończ
każdemu z nich w object inspectorze w OnClick w menu rozwijalnym nadajemy własności buttonów. Np.: Wstecz - OnClick - button3
Przyciskowi "Zakończ" dajemy kod:
application.terminate;
2) Widok
-Ulubione
-Historia
Zdarzenie OnClick "ulubione" :
if Panel4.visible=True
then
Panel4.Visible:=False
else
Panel4.Visible:=True;
Zakładając oczywiście, że Ulubione to panel 4.
Podobnie robimy z historią.
7. Koniec
I tak kończymy ten wyczerpujący tutorial. Możecie oczywiście dodać coś swojego do przeglądarki. Żegnam.
7. Ingerencja w pamięć aplikacji (Integer)
KOD
Na wstępie dodam, że poradnik jest dla tych co mają już jakieś pojęcie o delphi.
Teraz zaczniemy.
Najpierw dodajemy 2 procedury - czytającą i nadpisującą.
function ReadMemInteger(Address: Cardinal): Cardinal; //Read adress:value
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcId);
tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
CloseHandle(tProc);
Result:=value;
end;
procedure MemWriteInteger(Address: Integer; buf: Integer; Length: DWORD);
var ProcID, THandle: Integer;
e: DWORD;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcID);
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
WriteProcessMemory(THandle, Ptr(Address), @buf, Length, e);
CloseHandle(THandle);
end;
Na zielono zaznaczyłem część do zmiany. (artykuł na mpc - zaznaczone to: '''(FindWindow('TibiaClient',Nil)''' )
W tych przykładach jest to tibia, a aplikacja szuka jej po klasie.
Jeżeli chcemy by aplikacja szukała po nazwie okna, zamieniamy to na coś takiego:
(Nil, 'Tibia ')
Należy pamiętać o 3 spacjach (thx for wrotek from mpcforum.pl)
Jeżeli chcemy zrobić coś takiego dla np. War Rocka, zamiast tibia wpisujemy Warrock.
W ten sposób:
(Nil, 'Warrock ')
Teraz zajmiemy się użyciem tych procedur.
Jeżeli chcemy odczytać np. wartość hp musimy posiadać jego adres (Cheat engine).
Jeżeli chcemy np., aby label przybrał wartość naszego hp, procedura będzie wyglądała następująco:
label1.caption:=ReadMemInteger(IntToStr(133445);
Oczywiście zakładamy, że adres to 133445
Jeżeli jednak chcemy używać tego adresu częściej, można go dodać do stałych.
Jeżeli chcemy nadpisać wartość, procedura będzie wyglądała następująco:
memwriteinteger(133445,100,3);
Objaśnienie:
133445 - nasz adres hp
100 - nowa ilość naszego hp
3 - ilość znaków w drugiej rubryce
To wszystko.
Teraz zaczniemy.
Najpierw dodajemy 2 procedury - czytającą i nadpisującą.
function ReadMemInteger(Address: Cardinal): Cardinal; //Read adress:value
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcId);
tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
CloseHandle(tProc);
Result:=value;
end;
procedure MemWriteInteger(Address: Integer; buf: Integer; Length: DWORD);
var ProcID, THandle: Integer;
e: DWORD;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcID);
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcID);
WriteProcessMemory(THandle, Ptr(Address), @buf, Length, e);
CloseHandle(THandle);
end;
Na zielono zaznaczyłem część do zmiany. (artykuł na mpc - zaznaczone to: '''(FindWindow('TibiaClient',Nil)''' )
W tych przykładach jest to tibia, a aplikacja szuka jej po klasie.
Jeżeli chcemy by aplikacja szukała po nazwie okna, zamieniamy to na coś takiego:
(Nil, 'Tibia ')
Należy pamiętać o 3 spacjach (thx for wrotek from mpcforum.pl)
Jeżeli chcemy zrobić coś takiego dla np. War Rocka, zamiast tibia wpisujemy Warrock.
W ten sposób:
(Nil, 'Warrock ')
Teraz zajmiemy się użyciem tych procedur.
Jeżeli chcemy odczytać np. wartość hp musimy posiadać jego adres (Cheat engine).
Jeżeli chcemy np., aby label przybrał wartość naszego hp, procedura będzie wyglądała następująco:
label1.caption:=ReadMemInteger(IntToStr(133445);
Oczywiście zakładamy, że adres to 133445
Jeżeli jednak chcemy używać tego adresu częściej, można go dodać do stałych.
Jeżeli chcemy nadpisać wartość, procedura będzie wyglądała następująco:
memwriteinteger(133445,100,3);
Objaśnienie:
133445 - nasz adres hp
100 - nowa ilość naszego hp
3 - ilość znaków w drugiej rubryce
To wszystko.

Logowanie »
Rejestracja
Steam
YouTube
facebook
Team Speak3



Do góry
Pani Kasia

















