![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Здравствуйте! ошибка строка 225 - это как отдельный модуль?  
		
	
		
		
		
		
		
	
		
		
	
	
	  Код: 
	var
   AValue: string;
   APicture: TPicture;
   sExt: string;
   function FileExtIsGraphicFileType(const aFileName: string): boolean;
   var
      lExt: string;
   begin
      lExt := '*' + ExtractFileExt(aFileName);
      //lExt should be formatted as '*.jpeg' rather than '.jpeg' or 'jpeg'
      result := Pos( AnsiLowerCase(lExt), GraphicFilter(TGraphic) ) > 0;
   end;
begin
   AValue := '';
   if FileExists(aFileName) and FileExtIsGraphicFileType(aFileName) then
   begin
      APicture := TPicture.Create;
      try
         APicture.LoadFromFile(AFileName);
       SavePicture(APicture, AValue);
      finally
         FreeAndNil(APicture);
      end;
   end;
   sExt := ExtractFileExt(aFileName);
   if (sExt = '.jpg') then
      ADataController.Values[ARecordIndex, APictureJPGColumnIndex] := AValue
   else if (sExt = '.bmp') then
      ADataController.Values[ARecordIndex, APictureBMPColumnIndex] := AValue
   else if (sExt = '.png') then
      ADataController.Values[ARecordIndex, APicturePNGColumnIndex] := AValue;
end;SavePicture(APicture, AValue);  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 screen1a.jpg скрин сделал 
		
	
		
		
			Код: 
	unit MainForm;
interface
uses
    Windows
  , Messages, SysUtils, Classes, Graphics, Controls, Forms
  , Dialogs
  , FileCtrl, ExtDlgs, StdCtrls, ExtCtrls, cxGridLevel, cxClasses,
  cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView
  , cxGrid, cxInplaceContainer, cxTL, ImgList, cxGraphics
  , cxLookAndFeels
  , cxCustomData
  , cxImage, cxButtons, cxContainer, cxEdit, cxTextEdit, cxMaskEdit,
  cxGridCardView, cxNavigator, cxStyles, cxLookAndFeelPainters, dxSkinsCore,
  dxSkinBasic, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel,
  dxSkinCoffee, dxSkinDarkroom, dxSkinDarkSide, dxSkinDevExpressDarkStyle,
  dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans, dxSkinHighContrast,
  dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky,
  dxSkinMcSkin, dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins,
  dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
  dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black,
  dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinOffice2013DarkGray,
  dxSkinOffice2013LightGray, dxSkinOffice2013White, dxSkinOffice2016Colorful,
  dxSkinOffice2016Dark, dxSkinOffice2019Black, dxSkinOffice2019Colorful,
  dxSkinOffice2019DarkGray, dxSkinOffice2019White, dxSkinPumpkin, dxSkinSeven,
  dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus, dxSkinSilver,
  dxSkinSpringtime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld,
  dxSkinTheBezier, dxSkinsDefaultPainters, dxSkinValentine,
  dxSkinVisualStudio2013Blue, dxSkinVisualStudio2013Dark,
  dxSkinVisualStudio2013Light, dxSkinVS2010, dxSkinWhiteprint,
  dxSkinXmas2008Blue, Vcl.Menus, cxFilter, cxData, cxDataStorage, dxDateRanges,
  dxScrollbarAnnotations, cxCheckBox, cxGridCustomLayoutView
  ;
type
  TMForm = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    glImagesGrid: TcxGridLevel;
    cxGrid1: TcxGrid;
    lblDirectory: TLabel;
    meNewName: TcxMaskEdit;
    btnRename: TcxButton;
    meNewNumber: TcxMaskEdit;
    btnRefresh: TcxButton;
    btnDir: TcxButton;
    Memo1: TMemo;
    tvImage: TcxGridTableView;
    Chkbox: TcxGridColumn;
    Name: TcxGridColumn;
    NameWPath: TcxGridColumn;
    Date: TcxGridColumn;
    ImageBMP: TcxGridColumn;
    ImageJPG: TcxGridColumn;
    ImagePNG: TcxGridColumn;
    RecNo: TcxGridColumn;
    glImageCard: TcxGridLevel;
    cvImageCard: TcxGridCardView;
    cvRowNo: TcxGridCardViewRow;
    cvChkBox: TcxGridCardViewRow;
    cvNameWPath: TcxGridCardViewRow;
    cvImage: TcxGridCardViewRow;
    Panel3: TPanel;
    cxGrid2Level1: TcxGridLevel;
    cxGrid2: TcxGrid;
    cxGrid2CardView2: TcxGridCardView;
    cxGrid2CardView2Row1: TcxGridCardViewRow;
    cxGrid2CardView2Row2: TcxGridCardViewRow;
    cxNavigator1: TcxNavigator;
    cxStyleRepository1: TcxStyleRepository;
    GridTableViewStyleSheetDevExpress: TcxGridTableViewStyleSheet;
    cxStyle1: TcxStyle;
    cxStyle2: TcxStyle;
    cxStyle3: TcxStyle;
    cxStyle4: TcxStyle;
    cxStyle5: TcxStyle;
    cxStyle6: TcxStyle;
    cxStyle7: TcxStyle;
    cxStyle8: TcxStyle;
    cxStyle9: TcxStyle;
    cxStyle10: TcxStyle;
    cxStyle11: TcxStyle;
    cxStyle12: TcxStyle;
    cxStyle13: TcxStyle;
    cxStyle14: TcxStyle;
    GridCardViewStyleSheetDevExpress: TcxGridCardViewStyleSheet;
    cxStyle15: TcxStyle;
    cxStyle16: TcxStyle;
    cxStyle17: TcxStyle;
    cxStyle18: TcxStyle;
    cxStyle19: TcxStyle;
    cxStyle20: TcxStyle;
    cxStyle21: TcxStyle;
    cxStyle22: TcxStyle;
    cxStyle23: TcxStyle;
    cxStyle24: TcxStyle;
    SavePicture: TSavePictureDialog;
      procedure btnDirClick(Sender: TObject);
      procedure btnRefreshClick(Sender: TObject);
      procedure LoadData();
      procedure UpdateRecordPictureByFileName(  ADataController: TcxCustomDataController;
                                                AFileName: string;
                                                ARecordIndex,
                                                APictureBMPColumnIndex,
                                                APictureJPGColumnIndex,
                                                APicturePNGColumnIndex: Integer);
      procedure btnRenameClick(Sender: TObject);
      procedure RenameSelection();
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  MForm: TMForm;
implementation
{$R *.DFM}
procedure TMForm.btnDirClick(Sender: TObject);
var
   sDir : string;
begin
   SelectDirectory('Select the dir', '', sDir);
   lblDirectory.Caption := sDir;
   LoadData();
  //RenameSelection();
end;
procedure TMForm.btnRefreshClick(Sender: TObject);
begin
   LoadData();
end;
procedure TMForm.LoadData();
var
  Path, AFileName    : String;
  SR      : TSearchRec;
  iCount : integer;
   procedure ClearGrid();
   begin
      with tvImage.DataController do
      begin
         BeginUpdate;
         try
            while RecordCount > 0 do
               DeleteRecord(0);
         finally
            EndUpdate;
         end;
      end;
   end;
begin
    Path:=lblDirectory.caption; //Get the path of the selected file
    ClearGrid();
    tvImage.BeginUpdate;
    if FindFirst(Path+'\*.*', faArchive, SR) = 0 then
    begin
         iCount := -1;
         repeat
            iCount := iCount + 1;
            with (tvImage.DataController) do
            begin
               RecordCount := iCount+1;
               Values[iCount, RecNo.Index] := RecordCount;
               Values[iCount, Chkbox.Index] := TRUE;
               Values[iCount, Name.Index] := SR.Name;
               AFileName := Path + '\' + SR.Name;
               Values[iCount, NamewPath.Index] := AFileName;
               Values[iCount, Date.Index] := DateTimeToStr(FileDateToDatetime(SR.Time));
               UpdateRecordPictureByFileName(tvImage.DataController, AFileName, iCount, ImageBMP.Index, ImageJPG.Index, ImagePNG.Index);
            end; //endof with
         until FindNext(SR) <> 0;
         FindClose(SR);
    end;
    tvImage.ApplyBestFit;
    tvImage.EndUpdate;
end;
procedure TMForm.UpdateRecordPictureByFileName( ADataController: TcxCustomDataController;
                                                AFileName: string;
                                                ARecordIndex,
                                                APictureBMPColumnIndex,
                                                APictureJPGColumnIndex,
                                                APicturePNGColumnIndex: Integer);
var
   AValue: string;
   APicture: TPicture;
   sExt: string;
   function FileExtIsGraphicFileType(const aFileName: string): boolean;
   var
      lExt: string;
   begin
      lExt := '*' + ExtractFileExt(aFileName);
      //lExt should be formatted as '*.jpeg' rather than '.jpeg' or 'jpeg'
      result := Pos( AnsiLowerCase(lExt), GraphicFilter(TGraphic) ) > 0;
   end;
begin
   AValue := '';
   if FileExists(aFileName) and FileExtIsGraphicFileType(aFileName) then
   begin
      APicture := TPicture.Create;
      try
         APicture.LoadFromFile(AFileName);
         SavePicture(APicture, AValue);
      finally
         FreeAndNil(APicture);
      end;
   end;
   sExt := ExtractFileExt(aFileName);
   if (sExt = '.jpg') then
      ADataController.Values[ARecordIndex, APictureJPGColumnIndex] := AValue
   else if (sExt = '.bmp') then
      ADataController.Values[ARecordIndex, APictureBMPColumnIndex] := AValue
   else if (sExt = '.png') then
      ADataController.Values[ARecordIndex, APicturePNGColumnIndex] := AValue;
end;
procedure TMForm.btnRenameClick(Sender: TObject);
begin
{
   if (meNewName.Text = '') or (meNewNumber.Text = '') then
   begin
      ShowMessage('Either the New Name or Number is missing. Please specify this information.');
      exit;
   end;
   RenameSelection();
}
end;
procedure TMForm.RenameSelection();
var I: integer;
begin
{
   Memo1.Lines.Clear;
   with tvImage.DataController do
      for I := 0 to RecordCount - 1 do
      begin
         if Values[I, Chkbox.Index] = True then
            Memo1.Lines.Add('Line ' + inttostr(I) + ' is ticked. ' + Values[I, 1] + '    ' + Values[I,2])
         else
            Memo1.Lines.Add('Line ' + inttostr(I) + ' is NOT ticked. ' + Values[I, 1] + '    ' + Values[I,2]);
      end;
}
end;
end. | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 И что за ошибка? 
		
	
		
		
		
		
		
	
		
		
	
	
	[Telepath mode on] А случаем в AValue не должно ли передаваться имя файла? А то по твоему коду там сейчас передается пустая строка. Ну и сохранить файл с таким именем действительно сложновато будет [Telepath mode off]  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 я взял готовый пример. Pictures111.zip но когда запускаю редактор, как будто чего то не хватает. 
		
	
		
		
			 | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 в USES нужно добавить cxImage, тогда пропадает ошибка в строке 225 SavePicture(APicture, AVariantValue); 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	var
   i: Integer;
   path, filename: String;
  AColumn: TcxGridColumn;
  AValue: AnsiString;
  APicture: TPicture;
  MS: TMemoryStream;
  pngimage: TPNGImage;
  APath: String;
begin
AColumn := TcxGridColumn(cxGrid1DBTableView1Filename);
if assigned(AColumn)
then begin
     cxGrid1DBTableView1.DataController.RecordCount := FileListBox1.Items.Count;
     for i:=0 to FileListBox1.Items.Count -1
     do begin
        filename := IncludeTrailingPathDelimiter(GetCurrentDir) + FileListBox1.Items[i];
        AColumn := TcxGridColumn(cxGrid1DBTableView1Filename);
        if assigned(AColumn)
           then cxGrid1DBTableView1.DataController.Values[i, AColumn.Index] := ExtractFilename(filename);
        AColumn := TcxGridColumn(cxGrid1DBTableView1logo);
        if assigned(AColumn)
        then begin
             APicture := TPicture.Create;
             try
                if FileExists(filename)
                then begin
                     //pngimage.LoadFromFile(filename);
                     APicture.LoadFromFile(filename);
                     SavePicture(APicture, AValue);
                     end
                     else AValue := '';
                finally
                APicture.Free;
                end;
             if assigned(AColumn) and (AValue <> '')
             then begin
                  cxGrid1DBTableView1.DataController.Values[i, AColumn.Index] := AValue;
                  end;
             end;
        end;
     end;![]()  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Посмотрите внимательно на 100 строку вашего кода. У вас конфликт имен возник. Вы умудрились создать свойство формы SavePicture с тем же именем, что и сторонний метод SavePicture. 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
 
leon2009 (25.09.2023)
  | ||
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 А как в место цифр иконки установить?  
		
	
		
		
			  пр: в ячейке 1 = значит одна иконка или в ячейке 2 (integer) = значить две иконки ![]() error4a.jpg Код: 
	if (AViewInfo.Item <> cxGrid1DBTableView1reviews) or
    not (AViewInfo.EditViewInfo is TcxCustomTextEditViewInfo) then
      Exit;
  APainter := TcxPainterAccess(TcxViewInfoAcess(AViewInfo).GetPainterClass.
    Create(ACanvas, AViewInfo));
   // AImageRect := AViewInfo.Bounds;
  try
    AEditViewInfo := TcxCustomTextEditViewInfo(AViewInfo.EditViewInfo);
    AEditViewInfo.TextRect.Left := AEditViewInfo.TextRect.Left + AViewInfo.
      ContentBounds.Height + 1;
    APainter.DrawContent;
    APainter.DrawBorders;
    AImageRect := AViewInfo.ContentBounds;
    AImageRect.Width := AImageRect.Height;
  If (AViewInfo.GridRecord.Values[cxGrid1DBTableView1reviews.Index] < 0)
      Then begin
  ACanvas.DrawImage(cxImageList1, AImageRect.Left, AImageRect.Top, 0); end;
  If (AViewInfo.GridRecord.Values[cxGrid1DBTableView1reviews.Index] < 1)
      Then begin
  ACanvas.DrawImage(cxImageList1, AImageRect.Left, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 16, AImageRect.Top, 0); end;
  If (AViewInfo.GridRecord.Values[cxGrid1DBTableView1reviews.Index] < 2)
      Then begin
  ACanvas.DrawImage(cxImageList1, AImageRect.Left, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 16, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 32, AImageRect.Top, 0); end;
  If (AViewInfo.GridRecord.Values[cxGrid1DBTableView1reviews.Index] < 3)
      Then begin
  ACanvas.DrawImage(cxImageList1, AImageRect.Left, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 16, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 32, AImageRect.Top, 0);
  ACanvas.DrawImage(cxImageList1, AImageRect.Left + 48, AImageRect.Top, 0); end;
  finally
    APainter.Free;
  end;
  ADone := True;![]()  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну ты же перерисовываешь ячейку самостоятельно. 
		
	
		
		
		
		
		
	
		
		
	
	
	Соответсвенно, если ты хочешь видеить и цифры тоже (т.е. что то типа "3***", то надо сначала вывести саму цифру с помощью TextOut, а потом уже отрисовать иконки с соотв. смещением. ЗЫ. Да, и твой код можно оптимизировать. Код: 
	var
  StarsCount : Integer;
  I : Integer;
begin
  ...
  StarsCount := AViewInfo.GridRecord.Values[cxGrid1DBTableView1reviews.Index];
  For I := 0 To StarsCount-1 Do
    ACanvas.DrawImage(cxImageList1, AImageRect.Left+(I*16), AImageRect.Top, 0);
  ... | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
leon2009 (26.09.2023)
  | ||
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ну так не рисуй их. 
		
	
		
		
		
		
		
	
		
		
	
	
	У тебя там где-то вызов DrawContent - закомментируй его. Только тогда, возможно, нужно будет самому почистить соотв. облась (нарисовать прямоугольник цветом фона на весь AImageRect.  | 
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 это не честно, покрасить ячейки. 
		
	
		
		
		
		
		
	
		
		
	
	
	за вывод как я понял отвечает ClientDataSet и за данные  | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Еще раз - закоментируй вызов APainter.DrawContent; 
		
	
		
		
		
		
		
	
		
		
	
	
	Если вылезут артефакты при отрисовке, то вместо APainter.DrawContent; надо просто нарисовать прямоугольник цветом фона на размер ячейки (ACanvas.FillRect(AViewInfo.ContentBounds));.  | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
leon2009 (27.09.2023)
  | ||
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	try
   { AEditViewInfo := TcxCustomTextEditViewInfo(AViewInfo.EditViewInfo);
    AEditViewInfo.TextRect.Left := AEditViewInfo.TextRect.Left + AViewInfo.ContentBounds.Height + 1;}
    //APainter.DrawContent;
    //APainter.DrawBorders;
    (ACanvas.FillRect(AViewInfo.ContentBounds)); //закрашивает ячейку |