[BCB] TShiftState met C++ hoe?

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Bij sommige events krijg je een TShiftState mee als argument.

De TShiftState is in de classes.hpp gedefinieerd als volgt:

C++:
1
2
3
4
5
#pragma option push -b-
enum Classes__1 { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble };
#pragma option pop

typedef Set<Classes__1, ssShift, ssDouble>  TShiftState;  


Nu is het probleem dat bij een event oid, je de ShiftState niet kan benaderen als een fatsoenlijk type...

C++:
1
2
3
4
5
6
7
void __fastcall TfrmMyICQClient::ListView1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{

        if (Shift== iets) DoSomething();

}


Alle andere Types kan je in principe gewoon overnemen en uitlezen, maar bij ShiftStates dus niet.

Nu zit het probleem in de Set<Type, MinVal, MaxVal> <NewType>
Het is iets van een Delphi Object Pascal gebeuren.
Als ik het uit de Classes.hpp verwijder en vervang met
C++:
1
typedef Classes__1 TShiftState;

dan werkt de Shift wel, en kan ik hem benaderen als een int.

Echter ben ik hier erg huiverig voor, want ik rotzooi niet graag in de headers.
Heeft iemand hier een nuttige opmerking over?

Ik heb gezien dat je in Object Pascal de ShiftState wel gewoon met een if kan benaderen.

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • whoami
  • Registratie: December 2000
  • Nu online
Shiftstate is dus een set.
Kijk eens in de help, naar informatie over sets.

Hoe je items toevoegt aan een set, hoe je kijkt welke waarden er in een set zitten:
code:
1
2
3
4
5
TShiftState t;
t << ssAlt;
if( t in [ssAlt] )
{
}


Zoiets, als ik me nog goed herinner.

https://fgheysels.github.io/


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Dat is toch pascal met die brackets om de ssAlt?
Ik krijg het zo niets aan de praat...

Ik heb nu:
C++:
1
2
3
4
5
6
7
8
void __fastcall TfrmForm1::ListView1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{

        Shift << ssAlt;
        if(Shift in [ssAlt]) ShowMessage("Alt");

}


Met als errors:

- Illegal structure operation
- If Statement missing

[ Voor 4% gewijzigd door WarMaster op 28-11-2002 16:46 ]

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ja hallo lees de help eens.

C++:
1
2
3
4
5
6
void __fastcall TfrmForm1::ListView1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
        Shift << ssAlt;
        if(Shift.Contains(ssAlt))   ShowMessage("Alt");
}

[ Voor 6% gewijzigd door curry684 op 28-11-2002 16:39 . Reden: Bug in React.... ]

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Even nagekeken, en in de online help van TShiftState staat een link naar de definitie van Set, waarbij het volgende Example aan te klikken is:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>

#include <system.hpp>

using namespace std;

typedef Set<char,'U','Z'> UpperSet;
typedef Set<char,'a','z'> LowerSet;
typedef Set<char,'a','j'> HalfLowerSet;

void set_example()
{
LowerSet ae, ae2, ac, de;
UpperSet AE, AE2, AC, DE;
HalfLowerSet aj;

// Both of these are false. Sets are empty until members are added.
cout <<"Set ae " << (ae.Contains('a')?"does":"does not") << " contain 'a' " << endl;
cout <<"Set AE " << (AE.Contains('C')?"does":"does not") << " contain 'C' " << endl;

ae  << 'a' << 'b' << 'c' << 'd' << 'e';
ae2 << 'a' << 'b' << 'c' << 'd' << 'e';
ac  << 'a' << 'b' << 'c';
de  << 'd' << 'e';
aj  << 'd' << 'e';
DE  << 'D' << 'E';

cout <<"Now, set ae " << (ae.Contains('a')?"does":"does not") << " contain 'a' " << endl;

/***
 Compile-time error! Although sets 'de' and 'aj' contain the same members, 
  they are different types of sets and cannot be compared.
****/
//cout << (de==aj?" == ":" != ") << endl;

// Sets support operations * (intersection),+ (union) and - (difference).

cout << "Set ae " << (ae==(ac+de)?" == ":" != ") << "set ac + de." << endl;
cout << "Set de " << (de==(ae-ac)?" == ":" != ") << "set ae - ac." << endl;

// Clear member function
cout << "Set ae2: " << ae2 << endl;
ae2.Clear();
cout << "Set ae2: " << ae2 << " after ae2.Clear()" << endl;

// Sets also support operations *= (intersection),+= (union) and -= (difference).
ae2+=ac;
cout << "Union ae2+=ac: Set ae2 " << (ae2==ac?" == ":" != ") << "set ac." << endl;
ae2+=de;

cout << "Union ae2+=de: Set ae2 " << (ae2==ae?" == ":" != ") << "set ae." << endl;
ae2-=ac;
cout << "Difference ae2-=ac: Set ae2 " << (ae2==de?" == ":" != ") << "set de." << endl;
}

int main()
{
    set_example();

return 0;
}

I mean, daar staat alle mogelijke functionaliteit in. Not to mention dat je bij Set op 'Methods' kunt klikken om alle mogelijkheden te vinden.

[ Voor 32% gewijzigd door curry684 op 28-11-2002 16:43 . Reden: Readability ]

Professionele website nodig?


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Ja daar zit ik al een dag of 3 op te staren...

Ik word altijd een beetje scheel van de << en >> operators...

[ Voor 42% gewijzigd door WarMaster op 28-11-2002 16:45 ]

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Erm, het staat daar... nog net niet in hoofdletters omdat de compiler het anders niet zou snappen.

Professionele website nodig?


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
Bedankt voor je hulp en je sarcasme.. maar ja.. we zijn niet allemaal geniaal hè?

Waar kan je überhaupt zien wat de members zijn van TShiftState?
Of überhaupt een object?!

Er staat wel een lijst met Methods met de o.a. de == operator.. maar als ik die gebruikte, kreeg ik de melding dat het geen member was...

[ Voor 30% gewijzigd door WarMaster op 28-11-2002 16:55 ]

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

WarMaster schreef op 28 november 2002 @ 16:53:
Bedankt voor je hulp en je sarcasme.. maar ja.. we zijn niet allemaal geniaal hè?
Jammer genoeg niet, zou me een hoop werk schelen. :(
Waar kan je überhaupt zien wat de members zijn van TShiftState?
Of überhaupt een object?!

Er staat wel een lijst met Methods met de o.a. de == operator.. maar als ik die gebruikte, kreeg ik de melding dat het geen member was...
Nou dan klik je op de entry 'operator==' en dan zie je:
Compares two Set objects for equality.

code:
1
bool __fastcall operator ==(const Set& rhs) const;

Description
The == operator returns true if the two Set objects contain the same elements, false otherwise.
Need I say more?

Professionele website nodig?


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
curry684 schreef op 28 November 2002 @ 16:57:
[...]

Jammer genoeg niet, zou me een hoop werk schelen. :(
Niemand verplicht je om te helpen/antwoorden...
[...]

Nou dan klik je op de entry 'operator==' en dan zie je:

[...]

Need I say more?
Ja helaas volg ik het niet heelmaal.
Ik weet niet of ik eerst die operator moet aanmaken of overloaden of whatever...

Maar doet er nu ook niet meer toe...

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

WarMaster schreef op 28 November 2002 @ 17:05:
Niemand verplicht je om te helpen/antwoorden...
Niet te hard happen :)

* curry684 is best knuffelbaar.

Professionele website nodig?


Verwijderd

Maar je kunt dus in elk geval zoals curry684 zegt toch i.p.v.
if (Shift== iets) DoSomething();

dit doen:
if (Shift.contains(iets)) DoSomething();

Of volstaat dat niet?
edit:
Dat had je dus al begrepen... :/

[ Voor 11% gewijzigd door Verwijderd op 02-12-2002 17:44 ]


  • WarMaster
  • Registratie: Juni 1999
  • Niet online

WarMaster

Nosce te ipsum

Topicstarter
curry684 schreef op 28 november 2002 @ 17:13:
[...]

Niet te hard happen :)

* curry684 is best knuffelbaar.
ok... aai over de bol, allebij weer lief :+
Bij deze ook hartelijk bedankt... :)
Verwijderd schreef op 28 November 2002 @ 17:15:
Maar je kunt dus in elk geval zoals curry684 zegt toch i.p.v.
if (Shift== iets) DoSomething();

dit doen:
if (Shift.contains(iets)) DoSomething();

Of volstaat dat niet?
oooooooohkeeeeeeee, zo ver was ik al een tijdje :)

[ Voor 48% gewijzigd door WarMaster op 28-11-2002 17:20 ]

We live in a primitive time don't we, neither savage nor wise. Half measures are the curse of it; any rational society would either kill me or put me to some use.

Pagina: 1