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

c++ builder - kontrola pozicije forme

[es] :: C/C++ programiranje :: c++ builder - kontrola pozicije forme

Strane: 1 2

[ Pregleda: 5640 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon c++ builder - kontrola pozicije forme13.02.2007. u 10:29 - pre 209 meseci
Kako mogu kotrolirati poziciju na kojoj se nalazi forma. Odnosno, da definiram di mi se pojavi forma na početku izvođenja programa, bez obzira na rezoluciju koju koristi korisnik i kojim naredbama mogu unutar sourcea doznati gdje je trenutno prozor, i npr ako je na kordinati (napamet govorim) 100,100, onda ga stavi na 105,105.

Zahvaljujem
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 10:59 - pre 209 meseci
Citat:

Kako mogu kotrolirati poziciju na kojoj se nalazi forma.

Svaka forma ima Left, Top, Width i Height osobine. Možeš ih u svakom trenutku menjati po svom nahođenju. Na primer:
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Left = 20;
   Top = 20;
}



Citat:

Odnosno, da definiram di mi se pojavi forma na početku izvođenja programa, bez obzira na rezoluciju koju koristi korisnik i

Ovo je već tema za razmišljanje. Ja u svojim programima nudim sledeće mogućnosti koje korisnik može sam za sebe za podesi:

1) da uvek učita poslednju poziciju i veličinu prozora
2) da se uvek aplikacija pokaže maksimizovana (u ovom slučaju treba da vodiš računa i kako želiš da se ozvrši Restore-ovanje
tj gde da bude forma i koje veličine)
3) uvek da bude neka HARDCODED veličina i pozicija.

Svakako će ti trebati i mera ekrana: Screen->Height i Screen->Width.

Citat:

kojim naredbama mogu unutar sourcea doznati gdje je trenutno prozor, i npr ako je na kordinati (napamet govorim) 100,100, onda ga stavi na 105,105.


Kao što rekoh, svaka forma ima Left, Top, Width i Height osobine. Možeš ih u svakom trenutku menjati po svom nahođenju.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 11:01 - pre 209 meseci
U FormCreate funkciji možeš postaviti

Left = 105;
Top = 105;

točnije,

Form1->Left = 105;
Form1->Top = 105;

Znači, Left i Top su varijable u kojima se nalaze prve dvije koordinate prozora. Isto tako...

if(Form1->Top == 100)
Form1->Top = 105;
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 12:14 - pre 209 meseci
Citat:

U FormCreate funkciji možeš postaviti [...]


Savet je Borlandovih stručnjaka da se u BCB-u ne koriste OnCreate() i OnDestroy() dogadjaji.

Citat:


Ah ha! The short answer is - don't! OnCreate and OnDestroy are Delphi-isms that should be avoided
like the plague in C++ code. Here is Chris Uzdavinis excellent post on this:

OnCreate is a terrible decision to use, and it should not be there at all except that Delphi code uses it.
Other than the order of being called, there are several other problems as well. In C++ code, I beg and
plead people to not use it as if OnCreate didn't exist.

In addition to the unpredictable calling order (well, it is predictable but still surprises a lot of people),
there are some other significant problems with these events. These are major risks and should not be
taken lightly.

* derived objects won't have the base OnCreate called when they are created (unless users explicitly call it.)

* dynamic instantiation (in program code) of a object will NOT call the OnCreate event. [problem is fixed in
bcb 4 or 5 (not sure which), but exists in older versions

* there is no initializer list for OnCreate, so if OnCreate is all that is used only objects that have default
constructors can be used. If you have non-default constructors that need to be called, you *have* to
put the code in the true constructor. If the constructor must pass another pointer member to that constructor,
and that pointer is initialized in OnCreate, it is potentially not initialized at the time of the constructor and
the application will crash. If your class holds a reference to an object, then you can't use OnCreate to initialize
the reference, you MUST use a constructor.

* being a normal function, your OnCreate handler can be called multiple times (accidently, of course) which
anpotentially be disastrous.

* Copy construction doesn't call OnCreate at all. (However, in BCB5 copy construction of vcl objects is prevented
at compile time, older versions did not.)

* THE INITIALIZATION DONE BY FORMCREATE CAN POSSIBLY RUN *BEFORE* YOUR CONSTRUCOTR, WHICH
MEANS THAT YOUR ENTIRE PROGRAM BEHAVIOR IS POSSIBLY UNDEFINED. This is an ***EXTREMELY SERIOUS***
problem.


Umesto njih koristi konstruktor (IDE ga odmah pravi) i destruktor (moras ga sam napraviti).

Dalje, čuvaj se iskaza u kojima VEĆ koristiš pointer na TU forumu kada je objekat TE forme u fazi konstruisanja.

Code:

Form1->Left = 20; // <--- Dok god si u konstruktoru ili u oblasti TForm, bolje je: Left = 20;
Form1->Top = 20;

... u suprotnom (u imalo kompleksnijem kodu) dobices Access Violation-e.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 12:56 - pre 209 meseci
Ne slažem se, i to govorim čisto iz vlastitog iskustva.

Prije svega, ovaj tekst navodi greške u C++ Builderu 3 i 4, dok osobno ove probleme nisam primjetio u C++ Builderu 6. Isto tako, OnCreate se u praksi ponaša zapravo kao i konstruktor jer se izvrši prije samog pojavljivanja prozora tj. u njemu se mogu izvršiti inicijalizacije varijabli.

Konkretno, za ovaj slučaj gdje je riječ o inicijaliziranju članica Top i Left mislim da je i smješno ovo navoditi kao referencu zašto "nije dobro koristiti" OnCreate funkciju.
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 13:31 - pre 209 meseci
Ok, hvala majstori
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 15:05 - pre 209 meseci
E da... to korisim za snap, hoću da mi se forma može snap-ati za rubove. Sad to radi ok, al tek se snapa dok pustim click, a ja bi htio da se radi za vrijeme drag-a.
Evo funkcije

Code:

void __fastcall Tforma1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (Button == mbLeft)
    {
        ReleaseCapture();
        SNDMSG(Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
        if(forma1->Top <= 10) forma1->Top = -28;
        if(forma1->Left >= Screen->Width-245) forma1->Left = Screen->Width - 215;
        if(forma1->Left <= 10) forma1->Left=-30;
    }
}
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 16:35 - pre 209 meseci
Citat:

E da... to korisim za snap, hoću da mi se forma može snap-ati za rubove.

U vezi lepljivih prozora (koji se lepe uz ivice ili uz druge forme):
http://thecoadletter.com/article/0,1410,26370,00.html
(Ovaj kod može biti i jednostavniji ako je u pitanju samo lepljenje uz ivice)

@itf
itf, zašto ti je uvek stav negativan?

Citat:

Ne slažem se, i to govorim čisto iz vlastitog iskustva.

Kao što rekoh, na forumima specijalizovanim za BCB, čim pomeneš OnCreate i OnDestroy od najvećih
stručnjaka za taj proizvod ćeš dobiti jasan stav po tom pitanju kada je u pitanju C++ Builder.

Ti ljudi su profesionalci koji razvijaju komercijalne komponenete i koriste OOP koliko je maksimalno moguće
sa BCB-om. Sve što kažu, plod je tih iskustava, i ja naprosto nemam poriv da na svojoj koži dokazujem da
nisu u pravu, a pogotovo da im protivurečim. To je jako neozbiljno.

Ako tebi nešto radi na neki način, to UOPŠTE ne znači da se to tako uvek i radi. Pre neki dan si imao
jednu diskusiju o principima, gde si zagovarao principe. A ovde odjednom to pobijaš...

Citat:

Prije svega, ovaj tekst navodi greške u C++ Builderu 3 i 4,

Nisi dobro pročitao. Ima stvari koje su i dalje prisutne, pogotovo kad su u pitanju nasleđene klase.

Citat:

dok osobno ove probleme nisam primjetio u C++ Builderu 6.

Niko ne kaže da ti OnCreate i OnDestroy neće završiti posao u konkretnom primeru. Sve zavisi od toga koliko
su programi kompleksni.

Citat:

Isto tako, OnCreate se u praksi ponaša zapravo kao i konstruktor jer se izvrši prije samog pojavljivanja prozora
tj. u njemu se mogu izvršiti inicijalizacije varijabli.

Inicijalitacija varijabli "prije samog pojavljivanja prozora" se u BCB-u može uraditi na nekoliko mesta:
1. Konstruktor
2. OnCreate
3. OnActivate
4. OnShow
5. OnPaint
(od 3 - 4 uz nešto dodatnog koda)
Svaki od ovih događaja ima *značajne* prednosti i nedostatke. Ali se OnCreate nikako ne može posmatrati kao
*zamena* za konstruktor. Zna se šta konstruktor može, a šta ne može. Piše lepo u onom tekstu. Razlike su ogromne.

Citat:

Konkretno, za ovaj slučaj gdje je riječ o inicijaliziranju članica Top i Left mislim da je i smješno ovo navoditi kao
referencu zašto "nije dobro koristiti" OnCreate funkciju.

Ovo nisam uopšte naveo u kontekstu OnCreate, nego se samo tako zadesilo. To je sasvim druga greška.

Kod koji si naveo, a izvršava se u periodu konstrukcije, nebitno da li u OnCreate ili konstruktoru:
Code:

if(Form1->Top == 100)
   Form1->Top = 105;

... ima dva ozbiljna nedostatka:

1) OBAVEZAO si buduće korisnike da kao pointer na tu formu koristite oznaku Form1 !!! U suprotnom, ako neko kojim
slučajem pointer nazove BILO KAKO DRUGAČIJE (što je sasvim normalno) kod će se odnositi na neku levu, slučajno nazvanu
formu sa pointerom Form1, ili se uopšte neće moći kompajlirati. U C++ se to rešava ovako:
Code:

if(this->Top == 100)
   this->Top = 105;

... ili potpuno bez reference "Form1->".

Shodno kodu koji je gore postavljen:
Code:

void __fastcall Tforma1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (Button == mbLeft)
    {
        ReleaseCapture();
        SNDMSG(Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
        if(forma1->Top <= 10) forma1->Top = -28;
        if(forma1->Left >= Screen->Width-245) forma1->Left = Screen->Width - 215;
        if(forma1->Left <= 10) forma1->Left=-30;
    }
}

...obavezao si se da se instanca klase Tforma1 uvek zove forma1. To je višak. Ako ikad kreneš da razvijaš
svoje komponente ili TFrame objekte koje možeš koristiti u drugim tvojim aplikacijama, sve će ti biti jasno.

2) Uverićeš se vremenom 100% (čim kod postane obimniji i zahtevniji) da pointer Form1 u BCB-u ne mora
biti *validan* sve do dogadjaja pod brojem (3), OnActivate, pa će izrazi sa referencom "Form1->" pucati
samo zato što Form1 pointer još nije validan. Rešenje je samo ukloniti tu referencu.

 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 17:43 - pre 209 meseci
e da X files... hvala na pomoći, a što se tiče tray ikone, ne znam dal znaš, ali uspio sam naći lakši put od onih 70ak linija koda. Ima kontrola pod Samples, TrayIcon. Probao sam, i radi super, pogledaj.
E a kako radi popup menu kontrola ? - ono da nakon desnog klika, nudi nekoliko opcija i otvara novu formu ?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme13.02.2007. u 18:20 - pre 209 meseci
Citat:

[...] a što se tiče tray ikone, ne znam dal znaš, ali uspio sam naći lakši put od onih 70ak linija koda.
Ima kontrola pod Samples, TrayIcon. Probao sam, i radi super, pogledaj.


Koji BCB koristiš?

Standardna VCL komponenta TTrayIcon koju si pretpostavljam upotrebio (barem u verzijama do 6) ima
dosta registrovanih problema, i generalno se poseže za sirovim kodom.

O tome imaš više ovde:
http://tinyurl.com/38uk92

Nisam proveravao u novijim verzijama, ali verujem da je sve to ispravljeno. Ako se dobro sećam BDS 2006
ima čak dve takve komponente na raspolaganju, u koje je uključena i funkcionalnost balona, koja nije postojala
u verzijama < 6.

Jedan od osnovnih problema je bio što Tray ikona nije 'preživljavala' slučaj kada iz nekog razloga 'padne' Shell
program OS-a (explorer.exe). To se inače događa vrlo često, na primer loš CD koji ne može da se pročita može
da ubije explorer.exe. Takođe, Not Responding je često uzročnik.

Situaciju možeš da proizvedeš i veštački:

1) CTRL+ALT+DEL
2) Kartica Processes
3) Obeleži explorer.exe
4) End process

Nakon toga gubi se ikonice i tray, ostaje Task Manager. A sad, vraćanje:

5) Task Manager > File > New task (Run...)
6) Ukucaj: explorer
7) OK

Kada explorer.exe krene da oživljava, događa se dosta stvari, a jedna od njih je i osvežavanje tray-a,
zapravo Windows šalje poruku da je to u toku. Odgovornost svakog programa je da tu poruku uhvati i
odreaguje ponovnim postavljanjem.

TTrayIcon to ne radi (baš me zanima da li je ispravljenjo u BDS2006).

Rezultat je da je program aktivan u memoriji, ali ga nema u Tray-u.

Inače, poruka koju Windows šalje za regenerisanje tray-a nije konstanta, nego se pro treba registrovati:
RegisterWindowMessage( "TaskbarCreated" );
... ali to je već druga priča.

Citat:

E a kako radi popup menu kontrola ? - ono da nakon desnog klika, nudi nekoliko opcija i otvara novu formu ?

Pa tu treba da dodaš na formu posbenu TPopupMenu komponentu i staviš stavke i pridružiš kod, ako se dobro
sećam, iz TTrayIcon samo ukažeš na taj objekat PopupMenu1.

EDIT:

Eh da, ako se ipak odlučiš za TTrayIcon, imaš ovde ceo primer:
c:\Program Files\Borland\CBuilder6\Examples\Controls\Traydemo\


[Ovu poruku je menjao X Files dana 13.02.2007. u 19:44 GMT+1]
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 09:43 - pre 209 meseci
Citat:
X Files:
@itf
itf, zašto ti je uvek stav negativan?

Molim?? Obrazloži to "Uvijek".

Citat:
X Files:
Ti ljudi su profesionalci koji razvijaju komercijalne komponenete i koriste OOP koliko je maksimalno moguće
sa BCB-om. Sve što kažu, plod je tih iskustava, i ja naprosto nemam poriv da na svojoj koži dokazujem da
nisu u pravu, a pogotovo da im protivurečim. To je jako neozbiljno.

Neznam za tebe, no ja ne skačem čim netko kaže "hop", a pogotovo kad je riječ o programiranju. Svaka čast njima na njihovoj stručnosti, no isto tako, imam i jaku vjeru u samog sebe. Nisam ja jučer počeo programirati u BCB-u, i nisam nikad se susreo sa problemima o kojima je ovdje riječ. To mi je i više nego dovoljan dokaz da nema razloga panici, a kamoli da "nešto izbjegavam kao kugu". Isto tako, ako je to već toliki problem, zašto se pri pisanju tijela tih funkcija ne stavi nekakvo upozorenje tipa onog koje se dobije pri pisanju dll-ova?

Citat:
X Files:
Ako tebi nešto radi na neki način, to UOPŠTE ne znači da se to tako uvek i radi. Pre neki dan si imao
jednu diskusiju o principima, gde si zagovarao principe. A ovde odjednom to pobijaš...

Očito ti ovaj put nisi dobro pročitao o čemu je riječ. Ja sam tamo pričao o sasvim drugim stvarima vezanim uz miješanje biblioteka. To nema nikakve veze sa ovim.

Citat:
X Files:
Nisi dobro pročitao. Ima stvari koje su i dalje prisutne, pogotovo kad su u pitanju nasleđene klase.

Koje su to stvari? Daj mi konkretne slučajeve gdje ja vidim da će se desiti greška. Dokaži tvrdnje.

Citat:
X Files:
Niko ne kaže da ti OnCreate i OnDestroy neće završiti posao u konkretnom primeru. Sve zavisi od toga koliko
su programi kompleksni.

"Kompleksan" je relativan pojam. Ukoliko ne definiraš točno iznimke onda ne znam na što točno misliš. Nekome je kompleksno napraviti dva prozora i prijenos podataka među njima. Jel to znači da će se i tad desiti greška?

Citat:
X Files:
Inicijalitacija varijabli "prije samog pojavljivanja prozora" se u BCB-u može uraditi na nekoliko mesta:
1. Konstruktor
2. OnCreate
3. OnActivate
4. OnShow
5. OnPaint
(od 3 - 4 uz nešto dodatnog koda)
Svaki od ovih događaja ima *značajne* prednosti i nedostatke. Ali se OnCreate nikako ne može posmatrati kao
*zamena* za konstruktor. Zna se šta konstruktor može, a šta ne može. Piše lepo u onom tekstu. Razlike su ogromne.


Netočno. Zna se što je inicijalizacija. To je postavljanje na početnu vrijednost. To možeš postaviti u konstruktor i OnCreate, a OnActivate, OnShow i OnPaint su događaji koji se mogu desiti više puta tokom izvođenja programa i tada je to dodjeljivanje vrijednosti, a ne inicijalizacija. Zamisli sad da se neke varijable inicijaliziraju i tokom izviđenja programa da im se vrijednost promjeni. Tada na bilo koji od događaja Activate, Show i Paint će se te vrijednost prepisati onima početnima.

Stoga, koristiti te događaje za inicijalizaciju je greška.

Citat:
X Files:

if(Form1->Top == 100)
Form1->Top = 105;

... ima dva ozbiljna nedostatka:

1) OBAVEZAO si buduće korisnike da kao pointer na tu formu koristite oznaku Form1 !!! U suprotnom, ako neko kojim
slučajem pointer nazove BILO KAKO DRUGAČIJE (što je sasvim normalno) kod će se odnositi na neku levu, slučajno nazvanu
formu sa pointerom Form1, ili se uopšte neće moći kompajlirati. U C++ se to rešava ovako:
Code:

if(this->Top == 100)
this->Top = 105;

... ili potpuno bez reference "Form1->".


Prije svega, čim je dotična osoba pitala kako namjestiti početne koordinate prozora odmah je jasno da nivo znanja i nije baš na nekoj prevelikoj razini. Ne želim da se sad ovo krivo shvati pa da ispadne da nekoga vrijeđam jer nije tako, no baš zbog te činjenice sam pokušao da dam što više primjera za zadani problem.

Po defaultu prva forma se zove Form1. Nije točno specifirano da li će se koordinate mijenjati unutar ili VAN te klase. Stoga,
Form1->Top nije krivo ni unutar ni van te klase. Isto tako, korištenje this pointera je sasvim nepotrebno kad se mijenjaju članovi unutar svoje klase.

Kako će on nazvati svoju formu, to je njegov izbor. Nitko u životu općenito nije ništa OBVEZAN. Jedino se mora plaćati porez i umrijeti, a ja što sam napisao je striktno vezano za defualtni slučaj gdje se forma zove Form1.

Citat:
X Files:
... Ako ikad kreneš da razvijaš svoje komponente ili TFrame objekte koje možeš koristiti u drugim tvojim aplikacijama, sve će ti biti jasno.

Nisi ti uopće upoznat s mojim radom, a ako baš hoćeš znati ja sam svojim znanjem izrade komponenti i više nego zadovoljan, i baš zato mi je sve tu i jasno.

Pa stvarno... ako si se ti uhvatio samo za to što sam ja imenovao instancu kao Form1 onda ne znam šta da ti kažem...
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 09:50 - pre 209 meseci
Koja je suštinska razlika između konstrukora i destruktora u klasi ?
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 09:51 - pre 209 meseci
Citat:
explorer-1: Koja je suštinska razlika između konstrukora i destruktora u klasi ?

Konstruktor se izvršava kada se objekt kreira, a destruktor kada se objekt uništava.
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 11:29 - pre 209 meseci
Da... ali, u kojem smislu kad se uništava ? - kad se zapravo objekt uništava ? Prije Close(); ?
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 12:01 - pre 209 meseci
Citat:
explorer-1: Da... ali, u kojem smislu kad se uništava ? - kad se zapravo objekt uništava ? Prije Close(); ?

Ako misliš na prozor, on se ne uništava na close. Objekt se uništava sa delete, a većina kompajlera će sama uništiti sve objekte pri izlasku iz programa. No, to nije 100% sigurno, i da ne bi imao memory leak-ove poželjno je da sam uništiš sve objekte koje si dinamički alocirao.
 
Odgovor na temu

explorer-1

Član broj: 98573
Poruke: 102
*.adsl.net.t-com.hr.



Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 12:49 - pre 209 meseci
Ok, tnx. Znači prije naredbe delete [] moj_objekt, ide se u destruktor, znači tu mogu ja onda svašta nutra dodati, kao npr, nek zapamti poziciju prozora u datoteku i slično... pretty cool
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 14:43 - pre 209 meseci
Citat:

Molim?? Obrazloži to "Uvijek".

Prelistaj svoje odgovore/komentare u poslednjem periodu, ili još bolje zamoli nekog svog
*prijatelja* da protumači tvoju komunikaciju sa *ljudima*.

Apsolutno ne želiš ni da saslušaš a kamo li prihvatiš nečiji savet. Nedavno si imao direktne
odgovore i savete od 4 čoveka (verovatno najjača ovde kadra) čije se znanje ne može osporiti.
Svima si 'dokazao' da nisu u pravu, i da ćeš ipak nastaviti po svome. OK, tvoje pravo.

Obrni/okreni, saberi/oduzmi tebe tuđe mišljenje/viđenje uopšte ne zanima.

Ali ono što je meni 'bolo' oči je to što si njihove savete i komentare doživeo kao *oštar* napad
na tebe, tj. tvoju inteligenciju. Niko od njih se više nije upuštao u dalju diskusiju.

Imaš li nekoga da ti protumači *zašto*?

U komunikaciji sa ljudima porebna je poprilična doza tolerancije, čak i kada neko nije u pravu.

Citat:

ne znam za tebe, no ja ne skačem čim netko kaže "hop", a pogotovo kad je riječ o programiranju.

Profesionalci koji se kreću po Borlandovim forumima nisu *neko*, zapravo daleko su od *neko*.
S obzirom da sam tamo svakodnevno nekoliko godina unazad, vremenom dođeš do zaključka ko je od
njih autoritet i čije mišljenje ili savet možeš/trebaš prihvatiti jer je koristan. Jer je
princip ispravan.

Pogotovo kad je savet besplatan i bezbolan.

Citat:

Nisam ja jučer počeo programirati u BCB-u, i nisam nikad se susreo sa problemima o kojima je
ovdje riječ.

To što *ti* nisi imao probleme ne znači da je *tvoj* princip dobar, a tvoj nastup je bio kao da
bolje poznaješ problematiku od ljudi koji su dokumentovali probleme na koje su nailazili.

Citat:

To mi je i više nego dovoljan dokaz da nema razloga panici, a kamoli da "nešto izbjegavam kao kugu".

Moje reči: "Savet je Borlandovih stručnjaka da ..."
Reči Chris-a Uzdavinis-a: "In C++ code, I beg and plead people to not use ..."
Tvoje reči: "a kamoli da "nešto izbjegavam kao kugu"

To je tvoj način komunikacije.

Citat:

Isto tako, ako je to već toliki problem, zašto se pri pisanju tijela tih funkcija ne stavi nekakvo
upozorenje tipa onog koje se dobije pri pisanju dll-ova?

Dakle, po tebi to mora biti ključni dokaz da ljudi koji ono napisaše nisu u pravu...

Citat:

Očito ti ovaj put nisi dobro pročitao o čemu je riječ. Ja sam tamo pričao o sasvim drugim stvarima
vezanim uz miješanje biblioteka. To nema nikakve veze sa ovim.
Citat:

IZ JEDNE RANIJE DISKUSIJE:
Prije svega, C++ nije C. Isto tako, koliko citam ovaj forum ti samo znas spomenuti standard kad
nemas pojma kud bi se okrenuo
. Nije sve u njemu, već i u principima programiranja.
Ako si već krenuo da na jedan način rješavaš stvar onda se toga i drži. Takvo kupusarenje po
programskom kodu možeš samo kod svoje kuće raditi
, a na nečemu ozbiljnom ni slučajno.
Stoga, već od samih početaka treba se učiti nekim pravilima. Šta ti vrijedi standard kad
ti kod ne liči ni našto, a pogotovo kad se netko normalan sjedne pred to da bi to pokušao eventualno
održavati ili ispraviti neke greške?


Crveno je tvoj odnos prema ljudima i način komunikacije.
Plavo su tvoji stavovi o principima programiranja i kakao se treba učiti nekim pravilima. Pretpostavljam
da zato izbegavaš upotrebu konstruktora u C++.

Citat:

Koje su to stvari? Daj mi konkretne slučajeve gdje ja vidim da će se desiti greška. Dokaži tvrdnje.

Ti baš hoćeš da ti se sve servira na tacni. Nisam ja ničija tehnička podrška.

Citat:

"Kompleksan" je relativan pojam. Ukoliko ne definiraš točno iznimke onda ne znam na što točno misliš.
Nekome je kompleksno napraviti dva prozora i prijenos podataka među njima. Jel to znači da će se i tad
desiti greška?

U našem slučaju, komplekso je kad počneš da praviš ili barem razmišljaš u pravcu Reusabilnog koda što je i
osnovna ideja OOP-a. Za to je potrebno nasleđivanje, izvedene klase i precizni interfejsi. Problemi upravo
nastaju tada.

Citat:

Netočno. Zna se što je inicijalizacija.

Ja koji celo vreme govorim o konstruktoru kao jedinom ispravnom mestu kad je u pitanju konstruisanje objekta
sad kao ne kapiram šta je to.

Vrlo vešto si izbegao onaj dodatak koji si izrekao "prije samog pojavljivanja prozora", a ja sam naravno govorio
o tome. Čak sam ti rekao da je potrebno još dodatnog koda i da svaki od tih događaja ima *značajne* prednosti
i nedostatke.

A kad sam pomenuo konstruisanje rekao sam da se OnCreate nikako ne može posmatrati kao *zamena* za konstruktor.

Citat:

Tada na bilo koji od događaja Activate, Show i Paint će se te vrijednost prepisati onima početnima.

Sad ti meni pričaš ono što sam ja već rekao, a rekao sam da je za određene događaje potreban dodatni kod:
Code:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
   static bool HasPassedOnceOnActivate = false;

   if ( !HasPassedOnceOnActivate )
   {
      HasPassedOnceOnActivate = true;
      // SAMO JEDNOM SE IZVRŠAVA
   }
   
   // VIŠE PUTA SE IZVRŠAVA
}


Citat:

Stoga, koristiti te događaje za inicijalizaciju je greška.

Ti govoriš o inicijaliciji a ja o konstruisanju.

Citat:

Po defaultu prva forma se zove Form1. Nije točno specifirano da li će se koordinate mijenjati
unutar ili VAN te klase. Stoga, Form1->Top nije krivo ni unutar ni van te klase.

Odbijaš da shvatiš o čemu sam *sve* govorio, a to je: koristiti pointer Form1 u oblasti konstruisanja
tog objekta je opasno. Ti u minijaturi radiš sledeće:

Code:

class TKlasa
{
   int a;
   public:
   TKlasa();
};

TKlasa *Objekat;

TKlasa::TKlasa()
{
   Objekat->a = 10; // <--- AV
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TKlasa *Objekat = new TKlasa();
   delete Objekat;
}

Na primerima Hello World ovo ti se neće događati, ali 1000% hoće čim kod konstruktora postane
obimniji. Ovo je jedna od najčešćih grešaka koju početnici rade u C++, s obzorom na mesto gde
BCB IDE po defaultu pravi globalni pointer na formu. U početki radi, a u jednom trenutku imaju AV.

Citat:

Isto tako, korištenje this pointera je sasvim nepotrebno kad se mijenjaju članovi unutar svoje klase.

Sad ti meni objašnjavaš ono na što sam ja tebi ukazao. Ni ja u praksi naravno ne koristim this, ali kad
kažeš this-> time se obavezuješ da se da se radi o članu te klase a ne o nekog globalnoj varijalbli.

Ni const se ne koristi dok praviš programe za sebe, ali neko iz nekog razloga može insistirati...
Citat:

Kako će on nazvati svoju formu, to je njegov izbor. Nitko u životu općenito nije ništa OBVEZAN. Jedino se
mora plaćati porez i umrijeti, a ja što sam napisao je striktno vezano za defualtni slučaj gdje se forma zove Form1.

Sad si počeo da pričaš proizvoljno.
Ako sam ja korisnik te klase, ona valjda imam pravo izbora za ime pointera, a ne da moram da mu dajem naziv
Form1, jer je po tebi bilo bolje da ostane Form1.

Citat:

Pa stvarno... ako si se ti uhvatio samo za to što sam ja imenovao instancu kao Form1 onda ne znam
šta da ti kažem...

Se je počelo rečenicama:
"Savet je Borlandovih stručnjaka da ..."
"Dalje, čuvaj se iskaza u kojima VEĆ koristiš pointer na TU forumu kada je objekat TE forme u fazi konstruisanja."

... a onda je proradio tvoj standardni vid razmene mišljenja.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 15:53 - pre 209 meseci
Citat:

Prelistaj svoje odgovore/komentare u poslednjem periodu, ili još bolje zamoli nekog svog
*prijatelja* da protumači tvoju komunikaciju sa *ljudima*.

Apsolutno ne želiš ni da saslušaš a kamo li prihvatiš nečiji savet. Nedavno si imao direktne
odgovore i savete od 4 čoveka (verovatno najjača ovde kadra) čije se znanje ne može osporiti.
Svima si 'dokazao' da nisu u pravu, i da ćeš ipak nastaviti po svome. OK, tvoje pravo.

Obrni/okreni, saberi/oduzmi tebe tuđe mišljenje/viđenje uopšte ne zanima.

Ali ono što je meni 'bolo' oči je to što si njihove savete i komentare doživeo kao *oštar* napad
na tebe, tj. tvoju inteligenciju. Niko od njih se više nije upuštao u dalju diskusiju.

Imaš li nekoga da ti protumači *zašto*?

U komunikaciji sa ljudima porebna je poprilična doza tolerancije, čak i kada neko nije u pravu.

Od programera ti odjednom postade psiholog... Izvinjavam se, ali nismo ti i ja zajedno ovce čuvali da ti mene toliko dobro poznaš. Moj oblik komunikacije je takav kakav jest i uopće ne smatram da sam toliko nešto i pretjerao. Istina. Mogao sam i pametnije, no ja nisam jedan od onih koji vole nečiste račune. Otvoren sam pa šta bude.

Isto tako, imao si i tad šansu da kažeš što želiš, pa što nisi? Tu sad si odjednom se pojavio sa nekom potrebom da mi pričaš o načinu ponašanja, a gdje si bio kad je "trebalo"? To što sam se ja prema tim pojedincima ponašao kako već jesam sigurno ima svog razloga i ja to SIGURNO ne bih napravio da nije bilo tog razloga.

Bez obzira tko je to samnom raspravljao o nečemu, svatko je imao šansu da dokaže stvar. To što je on ovdje "najjači kadar" meni apsolutno ništa ne znači. Šta bi to trebalo biti? Tko to ovdje rangira po čemu je tko koliko "jak"? Ako me već nisu uspjeli uvjeriti u nešto... šta im ja mogu. Ja ne vjerujem da sam išta drugo tražio osim činjenica.

Citat:
Profesionalci koji se kreću po Borlandovim forumima nisu *neko*, zapravo daleko su od *neko*.
S obzirom da sam tamo svakodnevno nekoliko godina unazad, vremenom dođeš do zaključka ko je od
njih autoritet i čije mišljenje ili savet možeš/trebaš prihvatiti jer je koristan. Jer je
princip ispravan.

Pogotovo kad je savet besplatan i bezbolan.

Tko god da oni bili, u ovom konkretnom slučaju o kojem smo raspravljali, ne mogu niti se slažem s njihovim tvrdnjama. Situacije o kojima oni pričaju nisu striktno definirane, i dok u potpunosti ne budu poznata "pravila" za korištenje spornih dijelova koda ne kanim si oduzimati nikakvu slobodu u pisanju aplikacija. Savjet je nešto što se može, ali i ne mora prihvatiti. Sve ovisi o tvrdnjama i dokazima. Za mene one nisu dovoljne da bi se u ovom trenutku sa njima složio pa da ih je iznio ne znam tko.

Citat:

To što *ti* nisi imao probleme ne znači da je *tvoj* princip dobar, a tvoj nastup je bio kao da
bolje poznaješ problematiku od ljudi koji su dokumentovali probleme na koje su nailazili.
To je tvoje gledanje na stvari i sa time se ne slažem. Primjerice, ovo je gotovo ta ista situacija. Bez obzira koliko ti bio pametan, koliko da si ti napravio i ne znam što postigao u C++u to ne znači da se moje mišljenje odmah treba zanemariti ili sl. Nadasve, ja sve što sam naučio sam naučio iz samostalnog rada i primjera. Zbog toga i imam toliku sigurnost u sebe i bez obzira na druge sebi ipak najviše vjerujem i sam ću najbolje odlučiti da li je savjet dobar za mene ili nije. *Tebi* na savjetu hvala, no u konačnici ja sam taj koji donosi glavnu odluku kako ću i što ću.

Citat:

Moje reči: "Savet je Borlandovih stručnjaka da ..."
Reči Chris-a Uzdavinis-a: "In C++ code, I beg and plead people to not use ..."
Tvoje reči: "a kamoli da "nešto izbjegavam kao kugu"

To je tvoj način komunikacije.

Malo bolje pogledaj što sam citirao:

Ah ha! The short answer is - don't! OnCreate and OnDestroy are Delphi-isms that should be avoided
like the plague in C++ code
...

Citat:

Dakle, po tebi to mora biti ključni dokaz da ljudi koji ono napisaše nisu u pravu...

Ako se je već za glupi dll moglo staviti upozorenje o tome kako koristiti stringove, onda bi se svakako kroz 6-7 verzija C++ Buildera sigurno stavio barem neki mali komentar tog tipa u tijelu funkcije gdje piše nešto tipa:

"Not recommended! Please use constructor?".

...da je to već toliko strašan problem kao što ti pričaš.

Citat:

Crveno je tvoj odnos prema ljudima i način komunikacije.
Plavo su tvoji stavovi o principima programiranja i kakao se treba učiti nekim pravilima. Pretpostavljam
da zato izbegavaš upotrebu konstruktora u C++.

Nemaš ti što pretpostavljati... Prije svega nisi upoznat sa pozadinom te priče glede dotičnog i zašto sam ja to napisao, a nemam volje niti želim da ti to objašnjavam.

Citat:

Ti baš hoćeš da ti se sve servira na tacni. Nisam ja ničija tehnička podrška.

OTKAD NISI??? Pa ja ne znam da je ijedna bila tema o bcb-u da ti nisi imao nešto za reći ili nekoga poklopiti?! Tu si uzeo si nekakvu očinsku ulogu da odgovaraš na svako pitanje vezano uz bcb kao da si ti jedini koji tu nešto zna. To mi je bilo već od prva dva posjeta bilo jasno kad sam dobio tvoj pp u kojemu je bilo napisano kako je tebi dosadilo odgovarati na pitanja na koja se može naći odgovor u helpu?!?!

HEJ! Pa tko te to tražio uopće?? Ti si tu svakom loncu poklopac. Uvijek ti moraš nešto nadodati samo da bi tvoja zadnja bila i onda tu pričaš "nisam ja tehnička podrška"... Ono... mora biti barem neka mala sitnica... eto.. tek toliko da ti tu budeš glavni. Iz istog razloga mi je već više dosadilo išta pisati i odgovarati po forumu.

Citat:

Ja koji celo vreme govorim o konstruktoru kao jedinom ispravnom mestu kad je u pitanju konstruisanje objekta
sad kao ne kapiram šta je to.

Vrlo vešto si izbegao onaj dodatak koji si izrekao "prije samog pojavljivanja prozora", a ja sam naravno govorio
o tome. Čak sam ti rekao da je potrebno još dodatnog koda i da svaki od tih događaja ima *značajne* prednosti
i nedostatke.

A kad sam pomenuo konstruisanje rekao sam da se OnCreate nikako ne može posmatrati kao *zamena* za konstruktor.

Oprosti, ali ja sam na dva fakulteta završio sva moguća programiranja i šta sve ne, i takve akrobacije sa tim funkcijama nikad nisam vidio. To što si ti naveo uopće nije inžinjerski pristup problemu.

Citat:

.....
Na primerima Hello World ovo ti se neće događati, ali 1000% hoće čim kod konstruktora postane
obimniji. Ovo je jedna od najčešćih grešaka koju početnici rade u C++, s obzorom na mesto gde
BCB IDE po defaultu pravi globalni pointer na formu. U početki radi, a u jednom trenutku imaju AV.

Daj opet pročitaj. Nije bilo specificirano gdje se pristupa prozoru. Unutar ili van klase. Stoga sam napisao i tu opciju. Ti opet pričaš o nekim "obimnijim" tj. složenijim projektima, a opet ne navodiš nikakav primjer gdje nastaje greška upotrebom tog pristupa.

Citat:

Sad si počeo da pričaš proizvoljno.
Ako sam ja korisnik te klase, ona valjda imam pravo izbora za ime pointera, a ne da moram da mu dajem naziv
Form1, jer je po tebi bilo bolje da ostane Form1.

Nigdje ja nisam rekao da je po meni bolje da ostane Form1, već sam samo napomenuo da je tako po defaultu. Pošto je čovjek očito početnik prije će mu biti jasno što sam mislio reći nego da sam mu napisao nešto drugo.

Citat:

Se je počelo rečenicama:
"Savet je Borlandovih stručnjaka da ..."
"Dalje, čuvaj se iskaza u kojima VEĆ koristiš pointer na TU forumu kada je objekat TE forme u fazi konstruisanja."

... a onda je proradio tvoj standardni vid razmene mišljenja.

Ah... eto. Bilo je kako je bilo pa je najbolje da mišljenja ubuduće ne razmjenjujemo.
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.solent.climaxgroup.com.



+4 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 18:12 - pre 209 meseci
Hehe, good ol' ES..... :)

Btw, X je u pravu, dzabe se razvlachite. Zna se shta je konstruktor, sve drugo koristiti u C++u kao inicijalizacioni entry point za objekat je smeshno.

Btw 2, koristiti eksplicitno "this" pointer ima smisla, chak je i nemoguce bez toga u odredjenim situacijama, tako da ne treba biti iskljuchiv.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: c++ builder - kontrola pozicije forme14.02.2007. u 22:31 - pre 209 meseci
Citat:

OTKAD NISI??? Pa ja ne znam da je ijedna bila tema o bcb-u da ti nisi imao nešto za reći ili
nekoga poklopiti?! Tu si uzeo si nekakvu očinsku ulogu da odgovaraš na svako pitanje vezano uz
bcb kao da si ti jedini koji tu nešto zna.

Tačno. I mislim da si konačno izrekao ono što te zapravo mučilo. Nisu ni konstruktori ni pointeri.
Da si to odmah rekao, ja bih se složio sa tvojim tvrdnjama i ne bi bi bilo dalje besciljne rasprave.

BCB jeste moja oblast interesovanja i uvek se trudim da pomognem koliko mogu. Nekad manje nekad više,
srazmerno vremenu. Sve što kažem skup je iskustava, kako mojih tako i ljudi koji se bave BCB-om.

Nekoliko godina unazad dnevno o upotrebi BCB/VCL pročitam najmanje 100 postova. Od toga, dnevno
u svoju ličnu arhivu snimim desetak postova (sve što mi se učini korisnim/zanimljivim/upotrebljivim).

Otuda potiče i saznanje, a to sam ti odavno i rekao. Ništa ne krijem. Ovo čak nije ni stvar inteligencije
nego organizacije.

Vremenom sam 'izoštrio' oko i uglavnom sam u stanju da primetim i najmanju anomaliju (trenutnu ili
potencijalnu) koja se tiče VCL/BCB koda. Kad nešto primetim, ja i kažem.

Možda to tebi izgleda cepidlačenje, ali to je nivo/modus na Borlandovim forumima o BCB-u. Tako se i
tamo raspravlja, i gle čuda retko ko se ljuti. Tamo se debelo vodi računa o principima.

Nikoga ja ne sprečavam da kaže šta misli, niti mislim da ima nešto loše što su odgovori često detaljni,
kompletni i iritirajuće precizni.

Citat:

To mi je bilo već od prva dva posjeta bilo jasno kad sam dobio tvoj pp u kojemu je bilo napisano
kako je tebi dosadilo odgovarati na pitanja na koja se može naći odgovor u helpu?!?!

I ovo je tačno. Najviše volim da dostavim kokretan link, ako ga znam. Kad ga ne mogu pronaći ili mi
nije pri ruci, pokušam da reprodukujem kod, ako imam vremena.

BTW: Nije kulturno iznositi razgovore iz PP, pogotovo što ti sigurno nisam poslao PP da ti se požalim
na nešto, niti je ova moja izjava koje se inače i ne sećam bila u *prvom* planu. Moguće u nekom kontekstu.

(valjda bih sad ja trebalo da kopma po PP i da te pitam zašto se nisi ljutio na mene kad sam ti privatno
slao gotove kodove za sockete koje si od mene tražio)

Citat:

HEJ! Pa tko te to tražio uopće?? Ti si tu svakom loncu poklopac. Uvijek ti moraš nešto nadodati samo
da bi tvoja zadnja bila i onda tu pričaš "nisam ja tehnička podrška"... Ono... mora biti barem neka
mala sitnica... eto.. tek toliko da ti tu budeš glavni. Iz istog razloga mi je već više dosadilo išta
pisati i odgovarati po forumu.

Opet tvoj vid komunikacije (poklopci, lonci, ko je glavni, galama). Uopšte ne možeš da se uzdržiš...

Uopstalom, kako mogu biti glavni? Ne poznajem gomilu obasti ovde niti se mešam u njih.
Citat:

Oprosti, ali ja sam na dva fakulteta završio sva moguća programiranja i šta sve ne, i takve akrobacije
sa tim funkcijama nikad nisam vidio. To što si ti naveo uopće nije inžinjerski pristup problemu.

Takve 'akrobacije' koje nikad nisi video se ne uče na fakultetu (i ne treba), mora praksa. Debela.

BCB/VCL je takav kakav je, moraš povremeno učiti i te akrobacije.

Eto, opet ću ostaviti mali kod oko tih akrobacija, tek da 'budem glavni', i to u kontekstu pitanja
*ovog* thread-a. Tada me je mrzelo da pričam o tome.

Jedna od karakteristika onih "složenijih" programa je recimo da:

1. korisnik ima konfiguracijski (ini ili registry) mogućnost izbora kako će da mu se glavni prozor otvori
sledeći put kad pokrene program. Ja obično nudim tri mogućnosti: maksimizovana, poslednje korišćena ili
fabriči određena (hardcoded).
(imam utisak da je exolorer-1 hteo nešto ovako, barem ono pod dva)

2. glavnoj formi prethodi Splash Screen, eventualno Tip Of The Day, Sistem za licenciranje, ili bilo
koja druga forma koja eventualno ima smisla da se pojavi pre glavne ili zajedno sa glavnom.

3. i sl... da ne dužim

Code:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   // 1.
   // Na primer korisnik je odlučio da forma bude maksimizovana, što je jedan od slučajeva
   // if ( korisnik hoće maksimizovano, tj pročitano iz konfiguracije ) 
   WindowState = wsMaximized;
}
void __fastcall TForm1::FormActivate(TObject *Sender)
{
   // 2.
   ShowMessage( "Ova poruka izigrava bilo koji dijalog/formu, recimo sistem za licenciranje" );
}

Ako ovo probaš, videćeš vrlo neobičan vizuelni efekat.

Još gori efekat (čak bug) se postiže ako imaš neki razvučen Panel na glavnoj formi, koga je
potrebno prethodno sakriti, tj pre dijaloga:
Code:

void __fastcall TForm1::FormActivate(TObject *Sender)
{
   // 2.
   Panel1->Visible = false;
   ShowMessage( "Ova poruka izigrava bilo koji dijalog/formu, recimo sistem za licenciranje" );
   Panel1->Visible = true;
}

Jedno od rešenja je premestiti kod u poslednji nivo koji se može upotrebiti "pre prikaza glavne forme",
a to je OnPaint(). Vrlo neobično mesto, totalno atipično, ali to je valjda ta akrobacija.
Code:

void __fastcall TForm1::FormPaint(TObject *Sender)
{
   static bool HasPassedOnceOnPaint = false;
   if ( ! HasPassedOnceOnPaint )
   {
      HasPassedOnceOnPaint = true;
      ShowMessage( "Ova poruka izigrava bilo koji dijalog/formu." );
   }
}


Čovek u današnje vreme mora da ima puno mana da bi ga drugi podnosili.

P.S.

Oko onoga zašto onda nisam intervenisao... Naravno da nisam. Nisu pominjane majke i sl.
Neću valjda da učim druge o kulturi ponašanja.
 
Odgovor na temu

[es] :: C/C++ programiranje :: c++ builder - kontrola pozicije forme

Strane: 1 2

[ Pregleda: 5640 | Odgovora: 29 ] > FB > Twit

Postavi temu Odgovori

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