Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.77.98] |
|
Сообщ.
#1
,
|
|
|
Не знал как писать в несколько строк в StringGrid прочитал на вашем сайте
"Многострочные ячейки в StringGrid " там конечно всего 2 строки пишуться, но главоне идея! Спасибо за неё, Теперь выкладываю как писал из form6.Memo1 во вторую (с нуля) колонку StringGrid, N строк : Да и еще кстати если писать в соседние колонки текст с другим количеством строк то StringGrid моргает т.к. перерисовыя одни ячейки меняются другие и procedure TForm6.StringGrid1DrawCell вечно срабатывала, поэтому я печатаю пустые строки. Все привязано к форме Form6 патамуша в проекте толпища фор и просто запутаться по возникшим вопросам пишите PartizanDimon@yandex.ru Всегда рад помоч чем смогу ;-) procedure TForm6.Button2Click(Sender: TObject); // кнопка по которой всё срабатывает собссно var str: string ; i,l :integer; begin str:=''; i:=0; while form6.StringGrid1.Cells[2,i]<>'' do begin inc(i); end; if i = form6.StringGrid1.RowCount then form6.StringGrid1.RowCount:=form6.StringGrid1.RowCount+1; Gl:=i; //Gl глобальная переменная form6.StringGrid1.Cells[0,i]:=RivetToBottomStr(IntToStr(i),'|',form6.Memo1.Lines.Count); form6.StringGrid1.Cells[1,i]:= RivetToBottomStr(DateToStr(form6.DateTimePicker1.Date) ,'|',form6.Memo1.Lines.Count); l:=0; while Memo1.Lines.Count > l do begin str:= str + Memo1.Lines.Strings[l]+'|' ; inc(l); end; form6.StringGrid1.Cells[2,i]:=str; form6.StringGrid1.Cells[3,i]:= RivetToBottomStr(form6.Edit1.Text,'|',form6.Memo1.Lines.Count); form6.Caption :=str + IntToStr(form6.Memo1.Lines.Count); end; procedure TForm6.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var MainLine:string; Line1: string; Line2: string; hGrid: TStringGrid; i,q:integer; begin hGrid:= (Sender as TStringGrid); MainLine:=hGrid.Cells[ACol, ARow]; hGrid.Canvas.FillRect(Rect); q:=GetQuantityChar(MainLine, '|'); if (q<>0) and (ARow=Gl) then begin hGrid.RowHeights[Gl] := 15*q ; end; // 15 - высота строчки запросто можно сделать переменной if q=1 then begin hGrid.Canvas.TextOut(Rect.Left, Rect.Top, CutButtomStr(MainLine,1)); exit; end; for i :=1 to q-1 do begin begin Line1 :=GetICellFromRowStr(MainLine,i-1); Line2 :=GetICellFromRowStr(MainLine,i); end; hGrid.Canvas.TextOut(Rect.Left, Rect.Top+{StrHigth}15*(i-1) , Line1); hGrid.Canvas.TextOut(Rect.Left, Rect.Top+{StrHigth}15*i , Line2); end; end; Также использовал самодописанные функции : function GetICellFromRowStr(str:string; i:integer ):string ; // Возвращает значение i-й ячейки строки с разделителем '|' //Ячейка - в смысле подстрока между двумя разделителями "|" var k,j,q,w,stickcount: integer; strr:string[255]; ch:char; begin stickcount:=0; k :=0; strr:= ''; if length(str)=0 then begin result:='000'; exit; end; if GetQuantityChar(str ,'|') = 1 then begin result:='111'; exit; end; while stickcount <> i do begin inc(k); if str[k]= '|' then inc(stickcount); end; q:=k+1; inc(k); while str[k] <> '|' do begin inc(k); end; w:=k-1; for k := q to w do begin strr:=strr+str[k]; end ; result:=Strr; end; function RivetToBottomStr(str:string; ch:char; i:byte):string;// Добавляет i разделителей , задаваемых ch var k : byte; begin for k :=1 to i do str:=str + ch ; result := str; end; Админами модераторам : Сразу извеняюсь что запостил такой большой кусок кода , просто не знал куда его прислать,чтобы его выложили где положено :-/ при наличии свободного времени просьба объяснить мне как в дальнейшем делать ;-) чтобы всем было хорошо надеюсь на сотрудничество ;-)(мыло в начале поста) Молодцы! очень полезный сайт! M Используй форматирование кода! Невозможно ж ничего понять |
Сообщ.
#2
,
|
|
|
Сначала поясни где код: GetQuantityChar()
|