Delphi-ko ertzik gabeko forman / leihoan tamaina aldatzeko leuna

Mugarik gabeko formaren tamaina aldatzen saiatzen ari naiz, baina eskuina / beheko aldea erabiliz tamaina handitzen dudanean, muga eta sagua mugitzen duzun abiaduraren araberako tartea lortzen dut.

Efektua nabariagoa da ezkerreko ertzetik edo beheko ezkerreko izkinatik tamaina aldatzean ere, izugarria da nonahi (beste aplikazio komertzial batzuekin saiatu nintzen eta gainera gertatzen da). Efektu hau tamaina handiko ertzera aldatzean ere gertatzen da, baina ez da inprimakiaren ertzak kentzen ditudan bezain ikaragarria

Inprimakiaren diseinua goiko panelean dago izenburuaren barra funtzioa egiten duena (t Irudi eta botoiekin) eta beste bestelako informazioa erakusten duten panelak (oharra, beste kontrol batzuk, adibidez)eta abar)

Nire kodearen zati bat dago saguaren botoia harrapatu eta mezu bat leihoetara bidaltzen dudanean, baina antzeko emaitzekin eskuz egiten ere saiatu naiz

Goiko paneleko buffer bikoitza aktibatzeak keinukeria ekiditen du, baina panela aldatzea ez da inprimakiaren tamaina aldatzearekin sinkronizatzen, horrela hutsune bat agertzen da edo panelaren zati bat desagertzen da

 procedure TOutputForm.ApplicationEvents1Message( var Msg: tagMSG;
  var Handled: Boolean );
const
  BorderBuffer = 5;
var
  X, Y: Integer;
  ClientPoint: TPoint;
  direction: integer;
begin
  Handled := false;
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        if fResizable then
        begin
          if fSides = [sTop] then
            direction := 3
          else if fSides = [sLeft] then
            direction := 1
          else if fSides = [sBottom] then
            direction := 6
          else if fSides = [sRight] then
            direction := 2
          else if fSides = [sRight, sTop] then
            direction := 5
          else if fSides = [sLeft, sTop] then
            direction := 4
          else if fSides = [sLeft, sBottom] then
            direction := 7
          else if fSides = [sRight, sBottom] then
            direction := 8;
          ReleaseCapture;
          SendMessage( Handle, WM_SYSCOMMAND, ( 61440 + direction ), 0 );
          Handled := true;
        end;
      end;
    WM_MOUSEMOVE:
      begin
        // Checks the borders and sets fResizable to true if it's in a "border" 
        // ...
      end; // mousemove
  end; // case
end;

Nola saihestu dezaket eremu hori eta / edo leihoak berriro marraztera behartu? Delphi erabiltzen ari naiz baina irtenbide generiko bat (edo beste hizkuntza batean) edo aurrera egiteko norabidea ere ondo legoke niretzat

Aldez aurretik eskerrik asko

5
задан Jade 13 July 2011 в 09:40
поделиться