FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Nouvelle DLL pour faire une copie d'écran - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
SSD interne Crucial BX500 2,5″ SATA – 500 ...
Voir le deal
29.99 €

 

 Nouvelle DLL pour faire une copie d'écran

Aller en bas 
5 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 10:39

Je fais tout en Delphi. Voici le source de ma DLL:
Code:
library PrintScreen;

{
i% = dll_call1("ScreenCopy",x%) : ' x%=0--> tout l'écran  x%=1--> la fenêtre active
i% = dll_call0("Rotate90") : ' rotation de l'image interne de 90 degrés
i% = dll_call0("RotateM90") : ' rotation de l'image interne de -90 degrés
i% = dll_call0("Rotate180") : ' rotation de l'image interne de 180 degrés
i% = dll_call0("LoadPicture") : ' charger l'image du presse-papier dans l'image interne
i% = dll_call0("SavePicture") : recopier l'image interne dans le presse-papier
i% = dll_call6("ModifyPicture,x%,y%,T%,R%,G%,B%) : incruster l'image du presse-papier dans l'image interne
                                '  à partir de (x%,y%) avec la couleur de transparence R%,G%,B%
                                '  T% est le taux de transparence de l'image dans le presse-papier (0-100)
i% = dll_call2("ResizePicture,h%,w%) : redimensionner l'image du presse-papier à largeur w%, hauteur h%
                                '  comme s'il y avait un STRETCH_ON sur le presse-papier
i% = dll_call0("GetPictureHeight") : ' retourner la hauteur de l'image interne
i% = dll_call0("GetPictureWidth") : ' retourner la largeur de l'image interne
i% = dll_call0("GetClipboardPictureWidth") : ' retourner la largeureur de l'image dans le presse-papier
i% = dll_call0("GetClipboardPictureHeight") : ' retourner la hauteur de l'image dans le presse-papier
i% = dll_call3("SetPictureFilter",R%,G%,W%) : ' appliquer des filtres couleur sur l'image interne
                                ' une valeur de -1 signifie "inchangé"
i% = dll_call0("SetPictureGrayScale") : ' transformer une image en niveaux de gris
i% = dll_call1("SetPictureBrightness",d%) : ' ajuster la brillancede +/- d% (-255...+255)
i% = dll_call1("SetPictureGamma",g%) : ' ajuster le Gamma 0:plus foncé  <>0:plus clair
i% = dll_call4("CreatePictureGradientColor",adr(start$,adr(adresse$),adr(couleur_debut$),adr(couleur_fin$))
            ' remplir l'image interne par un dégradé entre les couleurs début et fin
            ' start$ donne le type de dégradé:
            '    L[ine] = dégradé par lignes  C[olonne] = dégradé en colonnes
            '    P[oint] = dégradé à partir d'un point  R[onds] = dégradé en ronds (cercle) autour d'un point
            '    B[ulles] = bulles dégradées autour d'un point
            '    adresse$ = numéro de départ (ligne, colonne ou coordonnées x,y d'un point)
            '    couleur_debut$, couleur_fin$ = valeurs R,G,B de la couleur
i% = dll_call1("SetImmediateMode",m%) : ' si m%>0: mettre systématiquement le presse-papier à jour
}

uses
  Windows,
  SysUtils,
  ClipBrd,
  Graphics,
  Math,
  StrUtils,
  Dialogs,
  Classes;
// Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
//  StdCtrls, ExtCtrls;

{$R *.res}

TYPE
  TRGBArray = ARRAY[0..32768-1]  of TRGBTriple;
  pRGBArray = ^TRGBArray;
var
  BInterne, B1: TBitmap;
  update_clipboard, BInterne_loaded: boolean;

function Rotate90:integer; stdcall; export;
type
  TRGBArray = ARRAY[0..65535] of TRGBTriple;
  pTRGBArray = ^TRGBArray;
  TArrayLigneCible = Array[0..65535] of pTRGBArray;

var
  BitmapSource, BitmapCible : TBitmap;
  x,y : integer;
  LigneSource, LigneCible : pTRGBArray;

begin
  result := 1;
  if not BInterne_loaded then exit;
  BitmapSource := TBitmap.Create;
  BitmapCible := TBitmap.Create;

  try
    BitmapSource.assign (Binterne);
    BitmapSource.pixelformat := pf24bit;
    BitmapCible.pixelformat := pf24bit;

    BitmapCible.Height := BitmapSource.Width;
    BitmapCible.Width := BitmapSource.Height;

    for y:=0 to BitmapSource.Height - 1 do
    begin
      LigneSource := BitmapSource.ScanLine[y];
      for x:=0 to BitmapSource.Width - 1 do
      begin
          LigneCible := BitmapCible.ScanLine[x];
          LigneCible[BitmapSource.Height - 1 - y] := LigneSource[x];
      end;
    end;
    BInterne.assign(BitmapCible);
    if update_clipboard then clipboard.Assign(BInterne);
  finally
    BitmapSource.free;
    BitmapCible.free;
  end;
  result := 0;
end;

function RotateM90:integer; stdcall; export;
type
  TRGBArray = ARRAY[0..65535] of TRGBTriple;
  pTRGBArray = ^TRGBArray;
  TArrayLigneCible = Array[0..65535] of pTRGBArray;

var
  BitmapSource, BitmapCible : TBitmap;
  x,y : integer;
  LigneSource, LigneCible : pTRGBArray;

begin
  result := 1;
  if not BInterne_loaded then exit;
  BitmapSource := TBitmap.Create;
  BitmapCible := TBitmap.Create;

  try
    BitmapSource.assign (Binterne);
    BitmapSource.pixelformat := pf24bit;
    BitmapCible.pixelformat := pf24bit;

    BitmapCible.Height := BitmapSource.Width;
    BitmapCible.Width := BitmapSource.Height;

    for y:=0 to BitmapSource.Height - 1 do
    begin
      LigneSource := BitmapSource.ScanLine[y];
      for x:=0 to BitmapSource.Width - 1 do
      begin
          LigneCible := BitmapCible.ScanLine[BitmapSource.Width - x - 1];
          LigneCible[y] := LigneSource[x];
      end;
    end;
    BInterne.assign(BitmapCible);
    if update_clipboard then clipboard.Assign(BInterne);
  finally
    BitmapSource.free;
    BitmapCible.free;
  end;
  result := 0;
end;

function Rotate180:integer; stdcall; export;
begin
  Rotate90;
  Rotate90;
  result := 0;
end;

function ScreenCopy(x:integer):integer; stdcall; export;
var
  m: integer;
begin
  m := x;
  if m<>0 then m := 1;
  keybd_event(VK_SNAPSHOT, m, 0, 0);
  keybd_event(VK_SNAPSHOT, m, KEYEVENTF_KEYUP, 0);
  result := 0;
end;

function LoadPicture:integer; stdcall; export;
begin
  if Clipboard.HasFormat(CF_PICTURE) then begin
    if not BInterne_loaded then BInterne := TBitmap.Create;
    BInterne.Assign(Clipboard);
    BInterne.PixelFormat := pf24bit;
    BInterne_loaded := true;
    result := 0;
  end else begin
    result := 1;
  end;
end;

function SavePicture:integer; stdcall; export;
begin
  result := 1;
  if not BInterne_loaded then exit;
  clipboard.Assign(BInterne);
  BInterne.Free;
  result := 1;
  BInterne_loaded := false;
  result := 0;
end;

function GetPictureHeight:integer; stdcall; export;
begin
  result := 1;
  if not BInterne_loaded then exit;
  result := BInterne.Height;
end;

function GetPictureWidth:integer; stdcall; export;
begin
  result := 1;
  if not BInterne_loaded then exit;
  result := BInterne.Width;
end;

function GetClipboardPictureWidth:integer; stdcall; export;
begin
  B1 := TBitmap.Create;
  B1.PixelFormat := pf24bit;
  B1.Assign(clipboard);
  result := B1.Width;
  B1.Free;
end;

function GetClipboardPictureHeight:integer; stdcall; export;
begin
  B1 := TBitmap.Create;
  B1.PixelFormat := pf24bit;
  B1.Assign(clipboard);
  result := B1.Height;
  B1.Free;
end;

function ResizePicture(h,w:integer):integer; stdcall; export;
var
  R: TRect;
begin
  B1:= TBitmap.Create;
  B1.PixelFormat := pf24bit;
  B1.Assign(clipboard);

  R.Left := 0;
  R.Top := 0;
  R.Right := w;
  R.Bottom := h;

  B1.Canvas.StretchDraw(R,B1);
  B1.Width := R.Right;
  B1.Height := R.Bottom;

  clipboard.Assign(B1);
  B1.Free;
  result := 0;
end;

function GetMergedBitmap(BackImage, TopImage: TBitmap; x,y,T,R,G,B: integer): TBitmap;
var
i, j, tw, th, TBack, TTop: Integer;
ft, fb: real;
BackRow, TopRow, ResultRow: pByteArray;
br, bg, bb, tr, tg, tb: integer;
begin
  tw := TopImage.Width;
  th := TopImage.Height;
  if x+tw>BackImage.Width-1 then tw := BackImage.Width - x - 1;
  if y+th>BackImage.Height-1 then th := BackImage.Height - y - 1;
  if BackImage.PixelFormat <>pf24bit then BackImage.PixelFormat := pf24bit;
  if TopImage.PixelFormat <>pf24bit then TopImage.PixelFormat := pf24bit;
  Result := TBitmap.Create;
  Result.Width := BackImage.Width;
  Result.Height := BackImage.Height;
  Result.PixelFormat := pf24bit;
  TTop := T;
  if TTop<0 then TTop := 0;
  if TTop>100 then TTop := 100;
  TBack := 100 - TTop;
  ft := TTop/100;
  fb := TBack/100;
  try
    for j := 0 to BackImage.Height - 1 do begin
      BackRow := BackImage.ScanLine[j];
      ResultRow := Result.ScanLine[j];
      if (j>=y) and (j<y+th) then begin
        TopRow := TopImage.ScanLine[j-y];
      end; // end if (j>=y) and (j<y+th)
      for i := 0 to BackImage.Width - 1 do begin
        br := BackRow[i * 3 + 2];
        bg := BackRow[i * 3 + 1];
        bb := BackRow[i * 3 + 0];
        ResultRow[i * 3 + 2] := br;
        ResultRow[i * 3 + 1] := bg;
        ResultRow[i * 3 + 0] := bb;
        if (i>=x) and (i<x+tw) then begin
          if (j>=y) and (j<y+th) then begin
            tr := TopRow[(i-x) * 3 + 2];
            tg := TopRow[(i-x) * 3 + 1];
            tb := TopRow[(i-x) * 3 + 0];
            if (tr <> R) or (tg <> G) or (tb <> B) then begin
              ResultRow[i * 3 + 2] := round(tr*ft + br*fb);
              ResultRow[i * 3 + 1] := round(tg*ft + bg*fb);
              ResultRow[i * 3 + 0] := round(tb*ft + bb*fb);
            end; // end if (tr <> R) or (tg <> G) or (tb <> B)
          end; // end if (j>=y) and (j<y+th)
        end; // end if (i>=x) and (i<x+tw)
      end; // end for i := 0 to BackImage.Width - 1
    end; // end for j := 0 to BackImage.Height - 1
  except
    on E : Exception do begin
      showmessage('Erreur:  j='+inttostr(j)+'  i='+inttostr(i)+'  y='+inttostr(y)+'  x='+inttostr(x));
      ShowMessage('Exception message = '+E.Message);
    end;
  end;  // end try
end;  // end function GetMergedBitmap

function ModifyPicture(x,y,T,R,G,B:integer):integer; stdcall; export;
{ CONST
  Yellow:  TRGBTriple =
          (rgbtBlue: 0; rgbtGreen: 255; rgbtRed: 255);    }
begin
  result := 1;
  if not BInterne_loaded then exit;
  B1:= TBitmap.Create;
  B1.PixelFormat := pf24bit;
  B1.Assign(clipboard);
  BInterne.Assign(GetMergedBitmap(BInterne,B1,x,y,T,R,G,B));
  if update_clipboard then clipboard.Assign(BInterne);
  B1.Free;
  result := 0;
end;

function SPF(R,G,B: integer):TBitmap; stdcall; export;
var
  h,w,i,j: integer;
  Row, InRow: pByteArray;
begin
  h := BInterne.Height - 1;
  w := BInterne.Width - 1;
  result := TBitmap.Create;
  result.Height := BInterne.Height;
  result.Width := BInterne.Width;
  result.PixelFormat := pf24bit;
  try
    for j:=0 to h do begin
      Row := result.ScanLine[j];
      InRow := BInterne.ScanLine[j];
      for i:=0 to w do begin
        if R>-1 then Row[i * 3 + 2] := R
          else Row[i * 3 + 2] := InRow[i * 3 + 2];
        if G>-1 then Row[i * 3 + 1] := G
          else Row[i * 3 + 1] := InRow[i * 3 + 1];
        if B>-1 then Row[i * 3 + 0] := B
          else Row[i * 3 + 0] := InRow[i * 3 + 0];
      end;
    end;
  except
    on E : Exception do begin
      showmessage('Erreur:  j='+inttostr(j)+'  i='+inttostr(i));
      ShowMessage('Exception message = '+E.Message);
    end;
  end;
end;

function SetPictureFilter(R,G,B: integer):integer; stdcall; export;
begin
  result := 1;
  if not BInterne_loaded then exit;
  BInterne.Assign(SPF(R,G,B));
  if update_clipboard then clipboard.Assign(BInterne);
  result := 0;
end;

procedure ConvertBitmapToGrayscale(const Bmp: TBitmap);
type
  TRGBArray = array[0..32767] of TRGBTriple;
  PRGBArray = ^TRGBArray;
var
  x, y, Gray: Integer;
  Row: PRGBArray;
begin
  for y := 0 to Bmp.Height - 1 do
  begin
    Row := Bmp.ScanLine[y];
    for x := 0 to Bmp.Width - 1 do
    begin
      Gray := (Row[x].rgbtRed + Row[x].rgbtGreen + Row[x].rgbtBlue) div 3;
      Row[x].rgbtRed := Gray;
      Row[x].rgbtGreen := Gray;
      Row[x].rgbtBlue := Gray;
    end;
  end;
end;

function SetPictureGrayScale:integer; stdcall; export;
begin
  result := 1;
  if not BInterne_loaded then exit;
  ConvertBitmapToGrayscale(BInterne);
  result := 0;
end;

function SetPictureBrightness(d:integer):integer; stdcall; export;
var
  delta, j, i, n: integer;
  RowIn, RowOut: PByteArray;
begin
  result := 1;
  if not BInterne_loaded then exit;
  if d>255 then delta := 255
    else if d<-255 then delta := -255
      else delta := d;
  B1 := TBitmap.Create;
  B1.Width := BInterne.Width;
  B1.Height := BInterne.Height;
  B1.PixelFormat := pf24bit;
  try
  for j:=0 to BInterne.Height-1 do begin
    RowIn  := BInterne.Scanline[j];
    RowOut := B1.Scanline[j];
    for i := 0 to 3 * BInterne.Width-1 do begin
        n := RowIn[i] + delta;
        if n>255 then n := 255
          else if n<0 then n := 0;
        RowOut[i] := Byte(n);
    end;
  end;
  except
    on E : Exception do begin
      showmessage('Erreur:  j='+inttostr(j)+'  i='+inttostr(i));
      ShowMessage('Exception message = '+E.Message);
    end;
  end;
  BInterne.Assign(B1);
  if update_clipboard then clipboard.Assign(BInterne);
  B1.Free;
  result := 0;
end;

function SetPictureGamma(d:integer):integer; stdcall; export;
var
  gamma, c: real;
  j, i, n: integer;
  RowIn, RowOut: PByteArray;
begin
  result := 1;
  if not BInterne_loaded then exit;
  if d=0 then gamma := 1.1
    else gamma := 1/1.1;
  B1 := TBitmap.Create;
  B1.Width := BInterne.Width;
  B1.Height := BInterne.Height;
  B1.PixelFormat := pf24bit;
  try
  for j:=0 to BInterne.Height-1 do begin
    RowIn  := BInterne.Scanline[j];
    RowOut := B1.Scanline[j];
    for i := 0 to 3 * BInterne.Width-1 do begin
        c := RowIn[i]/255;
        c := power(c,gamma);
        n := round(c*255);
        if n>255 then n:=255
          else if n<0 then n:=0;
        RowOut[i] := Byte(n);
    end;
  end;
  except
    on E : Exception do begin
      showmessage('Erreur:  j='+inttostr(j)+'  i='+inttostr(i));
      ShowMessage('Exception message = '+E.Message);
    end;
  end;
  BInterne.Assign(B1);
  if update_clipboard then clipboard.Assign(BInterne);
  B1.Free;
  result := 0;
end;

{
CreatePictureGradientColor(vertical/horizontal,aller simple/aller-retour,couleur1,couleur2)
start:
L=line  C=Colonne  P=Point
couleur:
D=couleur Début  F=couleur Fin

start:
  l[igne]
  c[olonne]
  p[point]

result:
  0=ok
  1=erreur "start"
  2=erreur "couleur début"
  3=erreur "couleur fin"
  4=erreur "adresse de début"
}

function isNumber(s:string):boolean;
var i:integer;
begin
  i:=1;
  while (i<=length(s)) and (s[i] in ['0'..'9','.','A'..'F','a'..'f']) do inc(i);
  result:=i>length(s);
end;

function decoder_color(couleur:string; var err:boolean):TRGBTriple;
var
  s1, s2: string;
  i,j, c: integer;
begin
  err := true;
  result.rgbtBlue := 0;
  result.rgbtGreen := 0;
  result.rgbtRed := 0;
  s1 := couleur;

  i := pos(',',s1);
  if i=0 then exit;
  s2 := leftstr(s1,i-1);
  if not isNumber(s2) then exit;
  val(s2,c,j);
  if (c<0) or (c>255) then exit;
  result.rgbtRed := c;
  s1 := midstr(s1,i+1,length(s1));

  i := pos(',',s1);
  if i=0 then exit;
  s2 := leftstr(s1,i-1);
  if not isNumber(s2) then exit;
  val(s2,c,j);
  if (c<0) or (c>255) then exit;
  result.rgbtGreen := c;
  s1 := midstr(s1,i+1,length(s1));

  s2 := s1;
  if not isNumber(s2) then exit;
  val(s2,c,j);
  if (c<0) or (c>255) then exit;
  result.rgbtBlue := c;
  err := false;
end;

function CreatePictureGradientColor(start,adresse,couleur_debut,couleur_fin:pchar):integer; stdcall; export;
var
  cd_r, cd_g, cd_b, cf_r, cf_g, cf_b: integer;
  sta, adr, adr_x, adr_y, cd, cf: string;
  int_sta, j, i, x0, y0, h, w, nr, ng, nb, x1, y1: integer;
  color_0, color_i, color_1: TRGBTriple;
  err: boolean;
  jmy02: real;
  d,r: integer;
  Row: PRGBArray;
begin
  result := 1;
  if not BInterne_loaded then exit;
  // analyser le type de départ
  sta := lowercase(pchar(pstring(start)^));
  sta := LeftStr(sta,1);
  result := 0;
  int_sta := pos(sta,'lcprb');
  if int_sta=0 then exit;

  // analyser l'adresse de départ
  result := 4;
  adr := pchar(pstring(adresse)^);
  case int_sta of
    1: begin; // ligne
        if not isnumber(adr) then exit;
        val(adr,y0,i);
        if (y0<0) or (y0>=BInterne.Height) then exit;
      end;
    2: begin ; // colonne
        if not isnumber(adr) then exit;
        val(adr,x0,i);
        if (x0<0) or (x0>=BInterne.Width) then exit;
      end;
    3,4,5: begin ; // point, ronds, bulles
        i := pos(',',adr);
        if i=0 then exit;
        adr_x := leftstr(adr,i-1);
        adr_y := midstr(adr,i+1,length(adr));
        if not isnumber(adr_x) then exit;
        if not isnumber(adr_y) then exit;
        val(adr_x,x0,i);
        val(adr_y,y0,i);
        if (x0<0) or (x0>=BInterne.Width) then exit;
        if (y0<0) or (y0>=BInterne.Height) then exit;
      end;
  end;

  // analyser la couleur de départ
  cd  := pchar(pstring(couleur_debut)^);
  result := 2;
  color_0 := decoder_color(cd,err);
  if err then exit;

  // analyser la couleur de fin
  cf  := pchar(pstring(couleur_fin)^);
  result := 3;
  color_1 := decoder_color(cf,err);
  if err then exit;

  // créer l'image temporaire
  B1 := TBitmap.Create;
  B1.Width := BInterne.Width;
  B1.Height := BInterne.Height;
  B1.PixelFormat := pf24bit;

  // traiter les différents cas
  case int_sta of
    1: begin ; // ligne
        h := B1.Height;
        w := B1.Width;
        for j:=0 to h-1 do begin
          Row := B1.ScanLine[j];
          if j>=y0 then begin
            nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(j-y0)/(h-y0));
            ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(j-y0)/(h-y0));
            nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(j-y0)/(h-y0));
          end else begin
            nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(j-y0)/(y0));
            ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(j-y0)/(y0));
            nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(j-y0)/(y0));
          end;
{          nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(j-y0)/h);
          ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(j-y0)/h);
          nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(j-y0)/h);      }
          for i := 0 to w-1 do begin
            Row[i].rgbtRed := nr;
            Row[i].rgbtGreen := ng;
            Row[i].rgbtBlue := nb;
          end;
        end;
      end;
    2: begin ; // colonne
        h := B1.Height;
        w := B1.Width;
        for j:=0 to h-1 do begin
          Row := B1.ScanLine[j];
          for i := 0 to w-1 do begin
            if i>= x0 then begin
              nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(w-x0));
              ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(w-x0));
              nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(w-x0));
            end else begin
              nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(x0));
              ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(x0));
              nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(x0));
            end;
            Row[i].rgbtRed := nr;
            Row[i].rgbtGreen := ng;
            Row[i].rgbtBlue := nb;
          end;
        end;
      end;
    3: begin ; // point
        h := B1.Height;
        w := B1.Width;
        for j:=0 to h-1 do begin
          Row := B1.ScanLine[j];
          for i:=0 to w-1 do begin
            if j>=y0 then begin
              if i>=x0 then begin // quart en bas à droite
                if i>=x0+(j-y0)*(w-x0)/(h-y0) then begin // partie droite de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(w-x0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(w-x0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(w-x0));
                end else begin    // partie gauche de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(j-y0)/(h-y0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(j-y0)/(h-y0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(j-y0)/(h-y0));
                end;
              end else begin      // quart en bas à gauche
                if i>=x0-(j-y0)*(x0)/(h-y0) then begin // partie droite de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(j-y0)/(h-y0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(j-y0)/(h-y0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(j-y0)/(h-y0));
                end else begin // partie gauche de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(x0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(x0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(x0));
                end;
              end;
            end else begin
              if i>=x0 then begin  // quart en haut à droite
                if i>=x0+(w-x0)*(y0-j)/y0 then begin // partie droite de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(w-x0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(w-x0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(w-x0));
                end else begin  // partie gauche de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(y0-j)/(y0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(y0-j)/(y0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(y0-j)/(y0));
                end;
              end else begin      // quart en haut à gauche
                if i>=x0-(y0-j)*x0/y0 then begin // partie droite de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(y0-j)/(y0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(y0-j)/(y0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(y0-j)/(y0));
                end else begin // partie gauche de la ligne
                  nr := color_0.rgbtRed  + round((color_1.rgbtRed-color_0.rgbtRed)*abs(i-x0)/(x0));
                  ng := color_0.rgbtGreen + round((color_1.rgbtGreen-color_0.rgbtGreen)*abs(i-x0)/(x0));
                  nb := color_0.rgbtBlue  + round((color_1.rgbtBlue-color_0.rgbtBlue)*abs(i-x0)/(x0));
                end;
              end;
            end;
            Row[i].rgbtRed := nr;
            Row[i].rgbtGreen := ng;
            Row[i].rgbtBlue := nb;
          end;
        end;
      end;
    4: begin ; // ronds
        h := B1.Height;
        w := B1.Width;
        x1 := (w-x0) * (w-x0);
        y1 := (h-y0) * (h-y0);
        r := round(max( sqrt(x0*x0+y0*y0) ,
                max( sqrt(x1+y0*y0) ,
                  max( sqrt(x0*x0+y1) ,
                    sqrt(x1+y1) ))));
        for j:=0 to h-1 do begin
          Row := B1.ScanLine[j];
          jmy02 := (j-y0)*(j-y0);
          for i:=0 to w-1 do begin
            d := round(sqrt(jmy02+(i-x0)*(i-x0)));
            Row[i].rgbtRed := round(Row[i].rgbtRed + (color_1.rgbtRed-color_0.rgbtRed)*d/r);
            Row[i].rgbtGreen := round(Row[i].rgbtGreen + (color_1.rgbtGreen-color_0.rgbtGreen)*d/r);
            Row[i].rgbtBlue := round(Row[i].rgbtBlue + (color_1.rgbtBlue-color_0.rgbtBlue)*d/r);
          end;
        end;
      end;
    5: begin ; // bulles
        h := B1.Height;
        w := B1.Width;
        x1 := (w-x0) * (w-x0);
        y1 := (h-y0) * (h-y0);
        r := max( sqr(x0*x0+y0*y0) ,
                max( sqr((w-x0)*(w-x0)+y0*y0) ,
                  max( sqr(x0*x0+(h-y0)*(h-y0)) ,
                    sqr((w-x0)*(w-x0)+(h-y0)*(h-y0)) )));
        for j:=0 to h-1 do begin
          Row := B1.ScanLine[j];
          jmy02 := (j-y0)*(j-y0);
          for i:=0 to w-1 do begin
            d := round(sqr(jmy02+(i-x0)*(i-x0)));
            Row[i].rgbtRed := round(Row[i].rgbtRed + (color_1.rgbtRed-color_0.rgbtRed)*d/r);
            Row[i].rgbtGreen := round(Row[i].rgbtGreen + (color_1.rgbtGreen-color_0.rgbtGreen)*d/r);
            Row[i].rgbtBlue := round(Row[i].rgbtBlue + (color_1.rgbtBlue-color_0.rgbtBlue)*d/r);
          end;
        end;
      end;
  end;
  // retourner le résultat
  BInterne.Assign(B1);
  if update_clipboard then clipboard.Assign(BInterne);
  B1.Free;
end;

function SetImmediateMode(m:integer):integer; stdcall; export;
begin
  update_clipboard := m<>0;
  result := 0;
end;

exports
  ScreenCopy,
  Rotate90,
  RotateM90,
  Rotate180,
  LoadPicture,
  SavePicture,
  ModifyPicture,
  ResizePicture,
  GetPictureHeight,
  GetPictureWidth,
  GetClipboardPictureWidth,
  GetClipboardPictureHeight,
  SetPictureFilter,
  SetPictureGrayScale,
  SetPictureBrightness,
  SetPictureGamma,
  CreatePictureGradientColor,
  SetImmediateMode;

begin
end.


Ceci est la version à jour.


Dernière édition par Klaus le Jeu 28 Juin 2012 - 12:54, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 10:46

Nouvelle version.

J'ai ajouté deux nouveaux motifs dégradés: couleurs en cercle autour d'un point, et des bulles symétriques autour d'un point (j'avoue que ce dernier motif est issu d'une erreur de programmation lors de la création du motif par cercle, mais je l'ai trouvé intéressant et je l'ai gardé).

Voici la nouvelle doc de la fonction:
Code:
i% = dll_call4("CreatePictureGradientColor",adr(start$,adr(adresse$),adr(couleur_debut$),adr(couleur_fin$))
            ' remplir l'image interne par un dégradé entre les couleurs début et fin
            ' start$ donne le type de dégradé:
            '    L[ine] = dégradé par lignes  C[olonne] = dégradé en colonnes
            '    P[oint] = dégradé à partir d'un point  R[onds] = dégradé en ronds (cercle) autour d'un point
            '    B[ulles] = bulles dégradées autour d'un point
            '    adresse$ = numéro de départ (ligne, colonne ou coordonnées x,y d'un point)
            '    couleur_debut$, couleur_fin$ = valeurs R,G,B de la couleur

On voit apparaitre deux nouveaux codes: R pour Ronds et B pour Bulles.

Avec Ronds, cela donne:
Nouvelle DLL pour faire une copie d'écran - Page 2 Ar10

Et aveb Bulles, cela donne:
Nouvelle DLL pour faire une copie d'écran - Page 2 Ab11
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 11:06

Cool le dégradé et le motif (bulles) qui est très original
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 12:52

Nouvelle version.

Ajour de la fonction:
Code:
i% = dll_call1("SetImmediateMode",m%) : ' si m%>0: mettre systématiquement le presse-papier à jour

Le déroulement normal est:
1. copier une image dans le presse-papier
2. appeler LoadPicture pour copier cette image dans l'image interne
3. appeler diverses fonctions pour manipuler l'image interne
...
4. appeler SavePicture pour copier l'image interne dans le presse-papier et supprimer l'image interne
5. récupérer l'image résultante du presse-papier

Conséquence: le résultat n'est visible qu'à la fin.

C'est pourquoi j'ai introduit le mode "immédiat". Dans ce mode, l'image résultante est copiée dans le presse-papier après chaque fonction affectant l'image interne. On peut donc récupérer le résultat immédiatement après chaque fonction affectant l'image interne, sans avoir à utiliser SavePicture et donc sans supprimer l'image interne. Ceci permettra d'afficher le résultat dans un objet PICTURE au fur et à mesure des modifications qui s'effectuent.

Ce mode est activé par l'appel de la nouvelle fonction SetImmediateMode avec le paramètre 1 (en fait, différent de zéro: -3 ou 27 marchent aussi). Ce mode est désactivé par l'appel de cette fonction avec le paramètre 0 (zéro).

Dans la foulée, j'ai ajouté un peu plus de sécurité autour des fonctions qui travaillent sur l'image interne. Ces fonctions ne s'exécutent plus que si LoadPicture a été effectué, et avant l'appel à SavePicture, pour s'assurer de la présence d'une image interne. En cas d'anomalie, la valeur retournée est 1, sinon 0.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 15:01

Klaus a écrit:

Note: Dommage: la balise code ne semble plus marcher ! Je en sais pas pourquoi.

Oui je l’ai constaté

Il semble que la balise [ code] [ /code] ne fonctionne plus avec un code de plusieurs lignes !
Pour remédier à ceci, utiliser
[ spoiler] [ /spoiler]
Sans espaces entres les crochets.

A+

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 15:24

Merci pour le code, Klaus. Je viens de le récupérer.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 15:43

@Papydall: Merci pour l'info !

EDIT

Bizarre. Je n'obtiens qu'une ligne vide, dans ce cas. Comment fais-tu ? Peux-tu me donner un exemple avec des ( à la place des [ ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 16:31

Le Spoiler est une ligne qui contient un code "replié" ça permet de mettre des choses en caché par défaut, pour ne pas prendre trop de place dans un forum dans certains cas, pour ne pas choquer la sensibilité de certains dans d'autre (un message prévient que le contenu peut être choquant, par exemple), dans d'autres cas, c'est un contenu qui ne doit pas être vu dès le départ (par exemple une solution), etc ...

Si tu cliques dessus, la ligne vide se déplie et tu vois le contenu du spoiler
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 16:37

Ah, Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 18:43

jicehel a tout dit.

lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 19:08

Désolé. La balise CODE a un problème. Mon post sur la première page contient la liste des fonctions de la DLL, et elle ne s'affiche pas dans le cadre normal avec CODE, mais en texte plein comme si je l'avais saisi sans balise. SPOILER marche, et c'est pourquoi j'ai ajouté la ligne
Citation :
(cliquer sur la ligne blanche pour voir la liste !)

C'est mon post du 24 Juin à 16:19. Si quelqu'un a une idée pour corriger cela...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 20:25

Puisque la balise code a des problèmes et que la balise spoiler fonctionne correctement, mieux vaut utiliser spoiler.
Tout le monde, je pense, sait qu’il faut cliquer sur la ligne blanche en dessous de spoiler pour visualiser son contenu.

Autrement, je ne vois pas d’autre alternative.
Peut être que quelqu’un d’autre a une solution.

A+

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 21:21

A priori, la balise semble refonctionner
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 21:39

Pour moi, la chose est réglée. Partout où je mets CODE, ça marche, sauf sur la première page de ce fil de discussion. J'ai donc mis SPOILER et une ligne incitant à cliquer sur la ligne blanche, et voilà.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 22:45

Salut Klaus.

Ça y est, j’ai trouvé pourquoi la balise code ne fonctionnait pas sur la 1ere page de ce fil de discussion :
Il y a, à la ligne 20 une 2eme balise code que tu as certainement oubliée :
Donc
[ code]
……..
[ code]
…….
[ /code]
Ne fonctionne pas.

Je me suis permis de corriger (pardon Klaus) et voici le résultat

La dll PrintScreen.dll ( de Klaus) contient maintenant les fonctions suivantes:
Code:

i% = dll_call1("ScreenCopy",x%) : ' x%=0--> tout l'écran x%=1--> la fenêtre active
i% = dll_call0("Rotate90") : ' rotation de l'image interne de 90 degrés
i% = dll_call0("RotateM90") : ' rotation de l'image interne de -90 degrés
i% = dll_call0("Rotate180") : ' rotation de l'image interne de 180 degrés
i% = dll_call0("LoadPicture") : ' charger l'image du presse-papier dans l'image interne
i% = dll_call0("SavePicture") : recopier l'image interne dans le presse-papier
i% = dll_call6("ModifyPicture,x%,y%,T%,R%,G%,B%) : incruster l'image du presse-papier dans l'image interne
 ' à partir de (x%,y%) avec la couleur de transparence R%,G%,B%
 ' T% est le taux de transparence de l'image dans le presse-papier (0-100)
i% = dll_call2("ResizePicture,h%,w%) : redimensionner l'image du presse-papier à largeur w%, hauteur h%
 ' comme s'il y avait un STRETCH_ON sur le presse-papier
i% = dll_call0("GetPictureHeight") : ' retourner la hauteur de l'image interne
i% = dll_call0("GetPictureWidth") : ' retourner la largeur de l'image interne
i% = dll_call0("GetClipboardPictureWidth") : ' retourner la largeureur de l'image dans le presse-papier
i% = dll_call0("GetClipboardPictureHeight") : ' retourner la hauteur de l'image dans le presse-papier
i% = dll_call3("SetPictureFilter",R%,G%,W%) : ' appliquer des filtres couleur sur l'image interne
 ' une valeur de -1 signifie "inchangé"
i% = dll_call0("SetPictureGrayScale") : ' transformer une image en niveaux de gris
i% = dll_call1("SetPictureBrightness",d%) : ' ajuster la brillance de + ou - d% (-255...+255)
i% = dll_call1("SetPictureGamma",g%) : ' ajuster le Gamma 0:plus foncé <>0:plus clair
i% = dll_call4("CreatePictureGradientColor",adr(start$,adr(adresse$),adr(couleur_debut$),adr(couleur_fin$))
 ' remplir l'image interne par un dégradé entre les couleurs début et fin
 ' start$ donne le type de dégradé:
 ' L[ine] = dégradé par lignes C[olonne] = dégradé en colonnes
 ' P[oint] = dégradé à partir d'un point R[onds] = dégradé en ronds (cercle) autour d'un point
 ' B[ulles] = bulles dégradées autour d'un point
 ' adresse$ = numéro de départ (ligne, colonne ou coordonnées x,y d'un point)
 ' couleur_debut$, couleur_fin$ = valeurs R,G,B de la couleur
i% = dll_call1("SetImmediateMode",m%) : ' si m%>0: mettre systématiquement le presse-papier à jour


lol! lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 EmptyJeu 28 Juin 2012 - 23:16

MERCI !!!!!!!!!!!!!!!!!
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Nouvelle DLL pour faire une copie d'écran - Page 2 Empty
MessageSujet: Re: Nouvelle DLL pour faire une copie d'écran   Nouvelle DLL pour faire une copie d'écran - Page 2 Empty

Revenir en haut Aller en bas
 
Nouvelle DLL pour faire une copie d'écran
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Pb avec copié-collé-adapté d'un button pour en faire un 2eme
» Pour faire plaisir à jjn4.
» Pour faire patienter...
» Pour faire patienter
» Pour faire patienter

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: