1 (edited by mucfun 2020-07-02 14:59:14)

Topic: How can I pass an "SaveImageToDataBaseControl" to a Script function?

I want to use a resize function on different "SaveImageToDataBaseControls".
The procedure on an Butto works fine and so I want to use it in an function fo more then one Imagecontrols.

How can I pass the control to the function?
This function should then be called on saging the record

 
Bildverkleinern (frmAdresse.Foto1)
Bildverkleinern (frmAdresse.Foto2)
Bildverkleinern (frmAdresse.Foto3)

I tried something like this but leads to error:

function BildVerkleinern (Image: TPicture): boolean;
var
    QuellBildName, QuellBildPfad: string;
    ZielBildName, ZielBildPfad: string;
    Querformat: boolean;
    BreiteNeu,HoeheNeu: integer;
begin
    Result := False;
    ShowMessage ('BreiteVorher=' + IntToStr(Image.Picture.Width) + ' HöheVorher=' + IntToStr(Image.Picture.Height));
    // if Image.dbImageIsChanged then
    begin

        if (Image.Picture.Width > 800) or (Image.Picture.Height > 800) then
            begin
                if Image.Picture.Width > Image.Picture.Height then
                    begin
                        BreiteNeu := 800;
                        HoeheNeu := int(Image.Picture.Height / Image.Picture.Width * 800);
                    end
                else
                    begin
                        HoeheNeu := 800;
                        BreiteNeu := int(Image.Picture.Width / Image.Picture.Height * 800);
                    end;

                QuellBildName := ExtractFileName(Image.dbFileName);
                QuellBildPfad := GetEnvironmentVariable('Temp');

                ZielBildName := '_' + QuellBildName;
                ZielBildName := ChangeFileExt(ZielBildName, '.jpg');
                ZielBildPfad := GetEnvironmentVariable('Temp');


                ShowMessage('QuellBild=' + QuellBildPfad + '\' + QuellBildName);
                ShowMessage('ZieBild=' + ZielBildPfad + '\' + ZielBildName);

                Image.Picture.SaveToFile(QuellBildPfad + '\' + QuellBildName);

                //PictureResizeToJpg(InFile, OutJpgFile: string; NewWidth: integer = -1; NewHeight: integer = 1, Quality: integer = 80);

                if PictureResizeToJpg(QuellBildPfad + '\' + QuellBildName, ZielBildPfad + '\' + ZielBildName, BreiteNeu,HoeheNeu,75) then
                    begin
                        Image.dbImageIsChanged := True;
                        Image.Picture.LoadFromFile(ZielBildPfad + '\' + ZielBildName);
                        ShowMessage ('BreiteNachher=' + IntToStr(Image.Picture.Width) + ' HöheNachher=' + IntToStr(Image.Picture.Height));
                        DeleteFile(QuellBildPfad + '\' + QuellBildName);
                        DeleteFile(ZielBildPfad + '\' + ZielBildName);
                        Result := True;
                    end;

            end;
    end;
end;

Re: How can I pass an "SaveImageToDataBaseControl" to a Script function?

Thats the solution for me:

procedure frmToDo_cmdToDoSpeichern_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmToDo.edToDoFoto1.dbImageIsChanged := BildVerkleinern (frmToDo.edToDoFoto1);
end;

function BildVerkleinern (Image: TdbImageDatabase): boolean;
var
    QuellBildName, QuellBildPfad: string;
    ZielBildName, ZielBildPfad: string;
    Querformat: boolean;
    BreiteNeu,HoeheNeu: integer;

begin
    Result := False;
    // ShowMessage ('BreiteVorher=' + IntToStr(Image.Picture.Width) + ' HöheVorher=' + IntToStr(Image.Picture.Height));
    // if Image.dbImageIsChanged then
    begin

        if (Image.Picture.Width > 800) or (Image.Picture.Height > 800) then
            begin
                if Image.Picture.Width > Image.Picture.Height then
                    begin
                        BreiteNeu := 800;
                        HoeheNeu := int(Image.Picture.Height / Image.Picture.Width * 800);
                    end
                else
                    begin
                        HoeheNeu := 800;
                        BreiteNeu := int(Image.Picture.Width / Image.Picture.Height * 800);
                    end;

                QuellBildName := ExtractFileName(Image.dbFileName);
                QuellBildPfad := GetEnvironmentVariable('Temp');

                ZielBildName := '_' + QuellBildName;
                ZielBildName := ChangeFileExt(ZielBildName, '.jpg');
                ZielBildPfad := GetEnvironmentVariable('Temp');


                // ShowMessage('QuellBild=' + QuellBildPfad + '\' + QuellBildName);
                // ShowMessage('ZieBild=' + ZielBildPfad + '\' + ZielBildName);

                Image.Picture.SaveToFile(QuellBildPfad + '\' + QuellBildName);

                //PictureResizeToJpg(InFile, OutJpgFile: string; NewWidth: integer = -1; NewHeight: integer = 1, Quality: integer = 80);

                if PictureResizeToJpg(QuellBildPfad + '\' + QuellBildName, ZielBildPfad + '\' + ZielBildName, BreiteNeu,HoeheNeu,75) then
                    begin
                        //Image.dbImageIsChanged := True;
                        Image.Picture.LoadFromFile(ZielBildPfad + '\' + ZielBildName);
                        ShowMessage ('BreiteNachher=' + IntToStr(Image.Picture.Width) + ' HöheNachher=' + IntToStr(Image.Picture.Height));
                        //DeleteFile(QuellBildPfad + '\' + QuellBildName);
                        //DeleteFile(ZielBildPfad + '\' + ZielBildName);
                        Result := True;
                    end;

            end;
    end;
end;