Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Glupava pitanja............

[es] :: Pascal / Delphi / Kylix :: Glupava pitanja............

Strane: 1 2

[ Pregleda: 5257 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp418.bih.net.ba.



Profil

icon Glupava pitanja............30.06.2005. u 18:31 - pre 229 meseci
1. Imam neku formu. Na toj formi ispuniš neke podatke i onda kada kliknem na to ok zatvorim tu formu. Kada je opet pokrenem aktivan bude onaj objekat koji sam zadnji put koristio. Na formi imam par Editbox-a i OK dugme. Prvi put mi je aktivan prvi EditBox ali svaki slijedeći put mi je aktivno OK dugme. Kako riješiti ovaj problem, znači da mi EditBox uvijek bude aktivan kada pozovem formu.
 
Odgovor na temu

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, ZeusSoftware
Stara Pazova

Član broj: 6155
Poruke: 507
80.93.238.*

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: Glupava pitanja............30.06.2005. u 19:36 - pre 229 meseci
Pa stavi na OnFormCreate event npr. EditBox1.active i resen problem .
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp466.bih.net.ba.



Profil

icon Re: Glupava pitanja............30.06.2005. u 20:30 - pre 229 meseci
hvala, ali to samo radi na EditBox, ali ne radi na drugim objektima???
Još glupih pitanja od mene.
2. Kako da znam kada neko pokuša isključiti moju aplikaciju sa TaskManager-a.
Ono Ctrl+Alt+Del -> End Process
Znam da se može riješiti ovako. Uvesti još jednu aplikaciju koja će kontrolirati da ji je ova glavna aplikacija u pogonu, ako nije onda će je pokrenuti.
Imali neko drugo rješenje?

[Ovu poruku je menjao borovac dana 30.06.2005. u 21:37 GMT+1]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Glupava pitanja............30.06.2005. u 20:56 - pre 229 meseci
1. Dinamicki kreiraj i oslobadjaj forme

2. Najbolje je da hookujes NtTerminateProcess() API, mada je to i najteze jer treba da radish injecting DLL-a u sve aktivne procese, a to ne bi bilo najsrecnije resenje ako ne znas da baratas time :>
Najlakse ti je da napravis sistem dva procesa koja ce se uzajamno cuvati (npr. neka svaki prvi, glavni proces kreira jedan mutex sa odredjenim imenom, i neka drugi proverava da li taj mutex postoji, i obrnuto)

[Ovu poruku je menjao reiser dana 30.06.2005. u 22:08 GMT+1]
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp25.bih.net.ba.



Profil

icon Re: Glupava pitanja............30.06.2005. u 23:44 - pre 229 meseci
1. Možel kakav detaljnjiji opis dinamičkog kreiranja i oslobađanja forme.
2. it's just too much for me

3. Kako znati kada pozovem Application.Terminate??
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Glupava pitanja............01.07.2005. u 00:01 - pre 229 meseci
1. Kad otvorish novi projekat u Delphi-u, pritisni Ctrl + F12 i otvori unit koji se zove Project1. Tamo imash:

Code:

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;


Vidish ovo Application.CreateForm(TForm1, Form1) ? Kad se izvrsi ova linija koda, program kreira formu Form1. Ti samo treba da izbacis to, tj da izbrises tu liniju i da je onda dinamicki kreiras, po potrebi. Recimo, kad korisnik klikne na neko dugme, uzmimo za primer Button1, a ti hoces da ti se otvori drugi prozor, Form2, napishesh ovo:

Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  Form2.Show;
end;


Ovaj kod ce kreirati Form2 i prikazati ga. Kad zelis da zatvoris taj prozor, tj formu, a pritom i oslobodis memoriju koja je alocirana za njene potrebe, samo u OnClose event te forme stavi Action := caFREE. Dakle:

Code:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFREE;
end;


I to je to, kad ovako kreiras/oslobadjas forme, tvoj program zauzima manje memorije sto je i glavna prednost ovoga. Imaj u vidu da kad oslobodis formu, oslobadjaju se i objekti koji pripadaju toj formi, tako da ce podaci koje je korisnik ukucao u recimo EditBox-ove biti izbrisani.

2. Nije teshko da se napravi sistem dve aplikacije. Neka ti prva glavna kreira jedan mutex:

Code:

  CreateMutex(nil, FALSE, 'mutex1');


A druga aplikacija neka u nekom infinite-loopu ili threadu proverava da li ovaj mutex postoji:

Code:

var
  mutexhnd : THandle;
begin
  repeat
    mutexhnd := OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'mutex1');
    If mutexhnd = 0 Then
    Begin
      // mutex ne postoji, znaci da i prva aplikacija nije aktivna, pa je trebamo izvrsiti
    End
    else
      ReleaseMutex(mutexhnd);
    Sleep(200);
  until 1 <> 1;


Ovo mozes i da uradis za drugu aplikaciju, tako da ni nju korisnik ne moze da ubije. Uostalom vidi sta kaze MSDN o mutexima.

3. Pojasni malo pitanje

poz

[Ovu poruku je menjao reiser dana 01.07.2005. u 01:02 GMT+1]

[Ovu poruku je menjao reiser dana 01.07.2005. u 01:07 GMT+1]
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp25.bih.net.ba.



Profil

icon Re: Glupava pitanja............01.07.2005. u 00:37 - pre 229 meseci
hvala, vrlo zanimljivo.
3. Jesam budala. Sam pozivam Application.Terminate. Sam mogu i prije tog poziva odraditi ono što želim.
 
Odgovor na temu

bondja

Član broj: 10286
Poruke: 167
*.gw.tehnicom.net.



+3 Profil

icon Re: Glupava pitanja............01.07.2005. u 10:40 - pre 229 meseci
Da bi ti uvek bila aktivna kontrola na drugom prozoru, stavi u njen onActivate event:
procedure TForm2.FormActivate(Sender: TObject);
begin
self.ActiveControl := self.Edit1; //<--- ili sta god ti treba....
end;

Tako da TForm2 ne moras dinamicki da kreiras dovodljno je poziv:
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;

Pozdrav!


 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp336.bih.net.ba.



Profil

icon Re: Glupava pitanja............01.07.2005. u 14:44 - pre 229 meseci
1. ovo je riješeno, hvala
2. Zar moj prozor ne prima neku poruku kada se uništi sa Task Managera.

novo pitanje
4. Imam objekat TEdit. Kada nešto unesem, da ne bih morao stalno klikati na OK, želio bih da na pritisak Entera odradim neku funkciju. To sam pokušao riješiti ovako:
Code:

procedure TEnterPasswordForm.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=VK_RETURN then EnterPasswordForm.Button1Click(self);
end;

Ovo radi ali se čije onaj windows zvuk. Kako da to odradim a da se ne čuje zvuk?
 
Odgovor na temu

bondja

Član broj: 10286
Poruke: 167
*.gw.tehnicom.net.



+3 Profil

icon Re: Glupava pitanja............01.07.2005. u 16:15 - pre 229 meseci
Stavi da je za Ok button property default := true;
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Glupava pitanja............01.07.2005. u 16:45 - pre 229 meseci
2. Ako se nasilno ubije preko TerminateProcess() API-ja onda ne prima nikakvu poruku. Elem, mozes da trapujes WM_CLOSE poruku koja se salje kad se proces pokusa zatvoriti na "lep" nacin. Samo pazi, ako hvatas WM_CLOSE i ponistavas to, neces moci zatvoriti program ni na ono X dugme u gornjem desnom uglu prozora :>
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp199.bih.net.ba.



Profil

icon Re: Glupava pitanja............01.07.2005. u 17:35 - pre 229 meseci
4. Hvala radi

novo pitanje, možda nije glupo

5. Kako otkriti handle trenutno aktivnog objekta na bilo kojem prozoru?
Code:

HwndTxt:= IntToStr(WindowFromPoint(P)); // Converts A Integer To A String, And Gets The Handle From Your Mouse X,Y Axis
GetWindowText(StrToInt(HwndTxt),Buff,255); //Stores The Name Of The Window In Buff
If Buff <> '' then //If Its Window Caption Is No Blank
WindowNameTxt:= buff; //Retrieves The Window Name From Buff;
GetClassName(StrToInt(HwndTxt),Buff,255); //Stores The ClassName In Buff;
ClassNameTxt:= Buff; //Retrievs The ClassName From Buff;

U ovom primjeru dobija se Handle, ime prozora i ime klase na kojoj se nalazi kursor miša.
Ako je miš na Edit objektu onda vrati ime klase TEdit, neki handle 149871.
Meni treba sve ovo ali za aktivan objekat, a ne za objekat preko kojega se nalazi miš.
Ključni dio je
Code:
WindowFromPoint(P)
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Glupava pitanja............01.07.2005. u 19:50 - pre 229 meseci
Hmm mozda GetActiveWindow() ?
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp2.bih.net.ba.



Profil

icon Re: Glupava pitanja............01.07.2005. u 21:10 - pre 229 meseci
5. GetActiveWindow ne vraća ništa, čak ni handle. Možda nešto drugo...
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp323.bih.net.ba.



Profil

icon Re: Glupava pitanja............03.07.2005. u 13:10 - pre 229 meseci
6. Kako kreirati i brisati Registry ključeve koristeći WinAPI funkcije??
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp110.bih.net.ba.



Profil

icon Re: Glupava pitanja............03.07.2005. u 13:58 - pre 229 meseci
7. Kako dobiti putanju Desktopa i StartMenu grupe??
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Glupava pitanja............03.07.2005. u 16:04 - pre 229 meseci
6.

Code:

// Cita string iz registry-a
function RegReadString(const hk : HKEY; const path, val : String) : String;
var
  hndKey : HKEY;
  vSize  : Integer;
begin
  result := '';

  If RegOpenKeyEx(hk, PAnsiChar(path), 0, KEY_QUERY_VALUE, hndKey) = ERROR_SUCCESS Then
  Begin
    If RegQueryValueEx(hndKey, PAnsiChar(val), nil, nil, nil, @vSize) = ERROR_SUCCESS Then
    Begin
      result := StringOfChar(#0, vSize);
      RegQueryValueEx(hndKey, PAnsiChar(val), nil, nil, PByte(result), @vSize);
    End;
    RegCloseKey(hndKey);
  End;
end;


I za brisanje:
Code:

  If RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                  PAnsiChar('SOFTWARE\putanja_do_parent_keya'),
                  0,
                  KEY_ALL_ACCESS,
                  hndKey) = ERROR_SUCCESS Then
    RegDeleteValue(hndKey, 'key_koji_se_nalazi_pod_parent_kljucem');
  CloseHandle(hndKey);
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp221.bih.net.ba.



Profil

icon Re: Glupava pitanja............03.07.2005. u 18:14 - pre 229 meseci
6. Hvala, meni nije trebalo za otvaranje već za kreiranje Ključa, ali snaći ću se.
7. za desktop
Code:

function GetDeskTopPath : string;
var
  shellMalloc: IMalloc;
  ppidl: PItemIdList;
begin
  ppidl := nil;
  try
    if SHGetMalloc(shellMalloc) = NOERROR then
    begin
      SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, ppidl);
      SetLength(Result, MAX_PATH);
      SHGetPathFromIDList(ppidl, PChar(Result));
      SetLength(Result, lStrLen(PChar(Result)));
    end;
  finally
   if ppidl <> nil then
         shellMalloc.free(ppidl);
  end;
end;

da bi dobio start menu treba zamijeniti CSIDL_DESKTOP sa CSIDL_STARTMENU.

Pozdrav

[Ovu poruku je menjao borovac dana 03.07.2005. u 19:14 GMT+1]
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp363.bih.net.ba.



Profil

icon Re: Glupava pitanja............03.07.2005. u 18:56 - pre 229 meseci
Riješio sam i šesto

8. Kako dobiti putanju QuickLaunch-a??
Želim kreirati shortcut moje aplikacije u njemu.
 
Odgovor na temu

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp261.bih.net.ba.



Profil

icon Re: Glupava pitanja............09.07.2005. u 18:03 - pre 228 meseci
9. Može li mi neko objasniti ovu liniju koda
Code:
Buf[I] := Char(Cardinal(Buf[I]) + Cardinal(N));

Code:
Buf:PChar;
N:Integer;

Zanimaju me funkcije Char() i Cardinal(). Šta one znače??
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Glupava pitanja............

Strane: 1 2

[ Pregleda: 5257 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.