Results 1 to 12 of 12

Thread: Weergave van plaatje niet zoals ik wil

  1. #1
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376

    Unhappy Weergave van plaatje niet zoals ik wil

    Hoi allemaal,

    Bedankt voor het lezen van mijn vraag! Ik heb het forum doorzocht maar kon niet iets vinden dat hierop lijkt dus hopelijk kunnen jullie me helpen!

    Ik heb een programma geschreven dat mijn desktop shortcuts moet gaan vervangen want ik heb er veel en veel en veel te veel. Omdat ik het leuk vind om ook een mooi plaatje op de achtergrond te hebben, gebruik ik de volgende code om dit te realizeren:

    Code:
    ...
    private
    myBackground: TBitmap;
    ...
    
    function GetDesktopBG: string;
    var R: TRegistry;
    begin
    R := TRegistry.Create;
    
    R.RootKey := HKEY_CURRENT_USER;
    R.OpenKey('\Control Panel\Desktop',False);
    Result := R.ReadString('WallPaper');
    
    R.Free;
    end;
    
    procedure TForm1.FormCreate(Sender:TObject);
    begin
    myBackground := TBitmap.Create;
    myBackground.LoadFromFile(GetDesktopBG);
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    begin
    Canvas.Draw(0, 0, myBackground);
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    myBackground.Free;
    end;
    Het probleem is (vind ik) dat als je maar een klein beetje scrollt dat je plaatje er als in het volgende screenshot eruit komt te zien:

    http://i42.tinypic.com/2h3a3i0.jpg

    terwijl er het zoals in dit plaatje uit zou moeten zien:

    http://i39.tinypic.com/29cmfrp.jpg

    En dat heeft dit tot gevolg:

    http://i44.tinypic.com/2yzbdsk.jpg

    Ok, dat laatste plaatje is gewoon voor de lol, maar als nog, het blijft lelijk als het er zo uit komt te zien en ik heb geen idee hoe dit nu voorkomen kan worden. Kunnen jullie misschien een oplossing bieden?

    EDIT: PS: De echte code is een stuk uitgebreider, vanwege meerdere image formats ondersteuning en resizen naar de afmeting van het form, maar die functies leveren geen problemen op. Ik denk dat het puur ligt aan het het canvas.draw stukje code.
    Last edited by BobbaFet; 14-Jun-09 at 08:17.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  2. #2
    Waarom teken je het zelf op je form en neem je geen TImage om het weer te geven?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  3. #3
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Omdat je dan controls op een control op een control krijgt en dat vind ik slecht programeerwerk omdat TImage dezelfde afmetingen zou hebben als het form. Bovendien denk ik niet dat dat het probleem zou oplossen.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  4. #4
    Heb je het ook daadwerkelijk geprobeerd of hoop je dat dat je probleem niet oplost?
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  5. #5
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Ik ga ervan uit omdat een TCanvas een TCanvas is, ongeacht of het een TForm.Canvas of een TImage.Canvas is. Ik heb het, vanwege deze redenering, niet daadwerkelijk getest. Wat ik trouwens nog niet had vermeld, het form heeft 1 vaste afmeting van 740w x 555h, dus het ligt ook niet aan het niet gebruiken van het onResize event (wat natuurlijk makkelijk gecorrigeert kan worden door .Canvas.StretchDraw(drawRect,myBackground); te gebruiken).
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  6. #6
    Ik zou toch voor een TImage gaan, of je dat nu slecht programmeerwerk vind of niet.
    En als je besluit,om het toch zelf te tekenen dan zal je alles moeten double bufferen
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  7. #7
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Ok ik heb een paar dingen geprobeert met TImage, resultaten:
    1. Plaatje puur sec in timage laden, verder niks mee doen = plaatje scrollt van het scherm af.
    2. TImage mee laten scroll = levert flikkeringen op die niet worden tegen gegaan door double buffering.

    MAW: Het schiet allemaal niet op, heb voor de rest niet echt iets anders kunnen bedenken wat ik zou kunnen doen om het gewenste resultaat te krijgen. Is er een manier om ervoor te zorgen dat onPaint alle gedeeltes beschildert en niet alleen de "nieuwe gedeeltes" na een scroll actie. (das mijn vermoeden van wat er aan de hand is, iig)
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  8. #8
    Ik weet niet wat jij speciaal doet maar ik krijg geen flikkering met een TImage

    Wat ik doe:
    1) Een TImage op een form gooien
    2) AutoSize property op true zetten (eventueel kan je AutoSize op false laten en Align op alClient zetten)
    3) Tekening toekennen aan Picture property
    4) F9
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  9. #9
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Ja, das leuk zolang je geen scrollend form hebt. Dat werkt dus niet. Het plaatje scrollt dan buiten beeld terwijl ik dus wil dat deze het form blijft vullen.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  10. #10
    U vraagt, wij draaien
    Code:
    procedure TForm3.FormCreate(Sender: TObject);
    begin
      Constraints.MaxHeight := 555;
      Constraints.MinHeight := 555;
      Constraints.MaxWidth := 740;
      Constraints.MinWidth := 740;
      AutoScroll := true;
      HorzScrollBar.Smooth := true;
      HorzScrollBar.Tracking := true;
      VertScrollBar.Smooth := true;
      VertScrollBar.Tracking := true;
      Image1.AutoSize := true; //Left en Top staan op 0
    end;
    Resultaat: geen flikkering
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  11. #11
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Ik probeer het zo, mijn poker toernooi begint, alvast bedankt, ik ga er zeker mee bezig!
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  12. #12
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Hey bedankt voor al je input Henkie, dit werkt harstikke mooi!
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •