[C++] Werkt onder XP wel maar onder 98 niet?

Pagina: 1
Acties:

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 13:14

krietjur

Where am I?

Topicstarter
Ik ben bezig met een Windows programma, en daarbij wil ik een bitmap op 't scherm tekenen. In de help van Borland Builder staat keurig hoe dat moet, en heb dus dat voorbeeld even in een klein programma gestopt. Onder Windows XP werkt 't prachtig bij me, maar onder Windows 98 werkt 't om 1 of andere reden niet, en het is juist belangrijk dat 't wel onder 98 draait :)

Ik weet nou dus niet waar het aan ligt, het gaat om dit stuk code wat, met een kleine aanpassing, rechtstreeks uit de help komt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;

try
{
  BrushBmp->LoadFromFile("back.bmp");
  Form1->Canvas->Brush->Bitmap = BrushBmp;
  Form1->Canvas->FillRect(Rect(0,0,100,100));
}
__finally
{
  Form1->Canvas->Brush->Bitmap = NULL;
  delete BrushBmp;
}

Het kan natuurlijk ook zijn dat het aan mijn Windows 98 ligt ofzo, misschien is die installatie wel naar de *piep* maar dat kan ik hier nu niet testen.. :(
Als er iemand is die 't wil testen, het programma is hier te vinden. Het is gemaakt met Borland C++ Builder 5.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

en als je het compilet onder w98 ?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Jammergenoeg had je geen exe-bestand in je bestandje ingepakt, want dan had ik het wel willen testen. Ik heb geen Borland C++ builder dus ik kan hem niet compileren.

Kun je misschien per regel nagaan of de statements wel worden uitgevoerd en of de variabelen naderhand goed staan? Of doet ie gewoon niet wat ie wel had moeten doen?

  • krietjur
  • Registratie: Februari 2001
  • Laatst online: 13:14

krietjur

Where am I?

Topicstarter
Staat wel een .exe in dat zipje hoor.. maar 'k geloof dat je wel Builder geinstalleerd moet hebben om 'm te kunnen runnen. Ook compileren onder Windows 98 helpt niet, enige wat ik onder 98 te zien krijg is een wit vlak maar niet de bitmap erin. Onder XP werkt 't dus wel goed, en ook als ik 'm in compatibiliteitsmode zet. Ik heb onder 98 het hele programma al stap voor stap doorgelopen, maar in plaats van dat ie dus die bitmap "brusht" komt er een wit vlak :( Misschien iemand met Builder geinstalleerd die kan checken of 't werkt onder 98?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
ik kan het ieder geval niet proberen want hij mist een filetje dus je moet Borland C++ Builder 5 ieder geval wel geinstaleerd hebben. mischien handig om ff een build te maken waar dat niet voor nodig is

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Ook mooi SEH en C++ style exceptions door elkaar gemengt.

Verder, check de MSDN is naar de minimale versies van de API calls die je gebruikt.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Komt me bekend voor...

Gaat er niet toevallig iets mis met je redraw-message? (Volgens mij refreshen NT-achtigen het 'scherm' automatisch als je loopt te tekenen, bij 95-achtigen moet je expliciet een redraw aanroepen). (Correct me if i'm wrong)

Verwijderd

Rechtstreeks tekenen op het Form Canvas is sowieso niet de manier. Heb je het al op een TImage geprobeerd?
Wat je nog kan proberen is een Application->ProcessMessages() na de FillRect.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Op maandag 14 januari 2002 23:51 schreef The - DDD het volgende:
Ook mooi SEH en C++ style exceptions door elkaar gemengt.

Verder, check de MSDN is naar de minimale versies van de API calls die je gebruikt.
Wat is de SEH style dan? Try wordt toch voor beide gebruikt?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op dinsdag 15 januari 2002 15:50 schreef OlafvdSpek het volgende:

[..]

Wat is de SEH style dan? Try wordt toch voor beide gebruikt?
Nee, C++ heeft try en dat werkt samen met destructors -> geen memory leaks.
SEH/__try is dus niet structured ( snapt geen scopes ) maar werkt weer vanuit verschillende talen. Om memory leaks te voorkomen moet je zelf je delete's doen.

Oplossing: SEH translation, dan kun je elke SEH exception meteen vertalen in een C++ exceptie. (zie MSDN)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Doe eens voor de lol onder XP een ander window over dat ding slepen of het windowtje even half uit het scherm slepen, dan zie je het wel.

Inderdaad: alleen in een OnPaint handler tekenen, de reden dat het hier onder Win98 niet goed gaat is dat die het tekenen op die plek op het scherm als een 'viesmaking' beschouwt, oftewel het ding meteen invalidate en er een immediate Paint overheen krijgt wat het window weer netjes terugtekent in vlak grijs. NT vindt het wel een leuk idee dat jij dat ding betekent en jongt er pas zodra je het window *echt* vies maakt een invalidate overheen.

Oplossing: TImage of met de hand de Paint() van het form overloaden, of in de WndProc zelf de WM_PAINT afvangen, of een TPaintbox gebruiken en dan de OnPaint implementeren (in aflopende volgorde van goede manier, gewoon TImage pakken dus ;) )

Professionele website nodig?

Pagina: 1