'*' парола в DBGrid
7 отговора
0 прегледа
'*' парола в DBGrid
имам грид с поле "парола", където паролата трчбва да се появява във вид на "****'.
Кодът ми е следният:
grdPasswordOnDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var s:string;
i : integer;
begin
if Column.FieldName='PASSWORD' then
begin
if not(gdFixed in State) then begin
s:=Column.Field.AsString;
for l:=1 to length(s) do s[l]:='*';
with (Sender as TDBGrid).Canvas do begin
TextOut(Rect.Left, Rect.Top,s);
end;
end;
end;
end;
и нищо....
и това [линк], пак не ми показва паролата с '***'
та, млко помощ ми е необходима
Кодът ми е следният:
grdPasswordOnDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var s:string;
i : integer;
begin
if Column.FieldName='PASSWORD' then
begin
if not(gdFixed in State) then begin
s:=Column.Field.AsString;
for l:=1 to length(s) do s[l]:='*';
with (Sender as TDBGrid).Canvas do begin
TextOut(Rect.Left, Rect.Top,s);
end;
end;
end;
end;
и нищо....
и това [линк], пак не ми показва паролата с '***'
та, млко помощ ми е необходима
Re: '*' парола в DBGrid
Не ми допада идеята да правиш custom drawing в грида. Това винаги свършва с грозен и нетипичен изглед. Защо изобщо искаш да го показваш това поле в грида?
Конкретно по твоя проблем (предполагам ползваш делфийския TDBGrid) - провери дали си изключила DefaultDrawing (трябва да е false, за да се викат OnDrawColumnCell събитията).
Ако искаш да избегнеш показването на паролата, но държиш много да имаш копие на звездното небе в грида, можеш още когато селектираш данните от базата да заместиш паролата със звездички, или пък да го направиш по-късно на клиента (например да си добавиш едно calculated поле в data set-а и да показваш него вместо оригинала). Но все пак има ли смисъл от цялата тази галимация? Просто не показвай това поле в грида
Linux isn't free, it's worthless.
Конкретно по твоя проблем (предполагам ползваш делфийския TDBGrid) - провери дали си изключила DefaultDrawing (трябва да е false, за да се викат OnDrawColumnCell събитията).
Ако искаш да избегнеш показването на паролата, но държиш много да имаш копие на звездното небе в грида, можеш още когато селектираш данните от базата да заместиш паролата със звездички, или пък да го направиш по-късно на клиента (например да си добавиш едно calculated поле в data set-а и да показваш него вместо оригинала). Но все пак има ли смисъл от цялата тази галимация? Просто не показвай това поле в грида
Linux isn't free, it's worthless.
Re: '*' парола в DBGrid
да, TDBGrid използвам.
Няма начин, трябва да го покажа полето. Изискване на клиента.
Мдаа, и за calculate поле гледах из нета и честно казано, не го пробвах този вариант.
Ок, мерси, отивам да действам....
Няма начин, трябва да го покажа полето. Изискване на клиента.
Мдаа, и за calculate поле гледах из нета и честно казано, не го пробвах този вариант.
Ок, мерси, отивам да действам....
onGetText
tFields имат събитие onGetText.
Значи,
DBGrid.DataSet.FieldByName('име на полето').OnGetText=BlaBla
...
procedure BlaBla(sender .. ще видиш какво трябва да има - в hepl)
begin
Text="****"
end;
Значи,
DBGrid.DataSet.FieldByName('име на полето').OnGetText=BlaBla
...
procedure BlaBla(sender .. ще видиш какво трябва да има - в hepl)
begin
Text="****"
end;
Re: onGetText
Да, но това ще попречи и на редактирането на паролата в някой TDBEdit после. Ще стане точно, като ония виц за блондинката, дето паролата ѝ била 6 звездички 
Linux isn't free, it's worthless.
Linux isn't free, it's worthless.
Re: onGetText
Не, че ми се спори (особено с теб :)), но как ще попречи?
Когато (и където) искаш, паролата може да е или реалната или звездичките.
Въпрос на въображение на програмиста.
Когато (и където) искаш, паролата може да е или реалната или звездичките.
Въпрос на въображение на програмиста.
Re: onGetText
Не, че се заяждам
Просто едното е презентация на данните (custom drawing-а), а другото е подмяна на данните. Някъде в кода някой ще вземе да прочете Field.Text и ще стане една...
Вече не съм сигурен (отдавна не пиша на Делфи) какво ще стане, ако се закачи такова поле (с OnGetText) към DBEdit и се редактира (дали звездичките няма да се пропагандират към базата). Но дори и само рискът с Field.Text си е достатъчен да ме откаже от идеята
Linux isn't free, it's worthless.
Просто едното е презентация на данните (custom drawing-а), а другото е подмяна на данните. Някъде в кода някой ще вземе да прочете Field.Text и ще стане една...
Вече не съм сигурен (отдавна не пиша на Делфи) какво ще стане, ако се закачи такова поле (с OnGetText) към DBEdit и се редактира (дали звездичките няма да се пропагандират към базата). Но дори и само рискът с Field.Text си е достатъчен да ме откаже от идеята
Linux isn't free, it's worthless.
Re: onGetText
Добре, раздвам се, че си в настроение
.
С OnGetText се манипулира едноверемено ИЗГЛЕДЪТ на всички контроли, които са свързани с field на DataSet-а.
Но това не е свързано с обратното манипулиране
т.е., ако се редактира контролата, тя ще си запази редактираната стойност до момента на следващото четене от DataSet.
Поне така си мисля, че работеше, защото обикновено така съм го ползвал. (Ако има някакво недоразумение, ще е, защото обикновено ползвах заявки, а не таблици).
За съжаление вече и аз рядко пиша на Делфи, а и рядко пиша БД (напоследък), щото това сигурно е по същия начин и в C#
.
Това C# е много близко, за всички, ползвали Делфи, нали :).
С OnGetText се манипулира едноверемено ИЗГЛЕДЪТ на всички контроли, които са свързани с field на DataSet-а.
Но това не е свързано с обратното манипулиране
т.е., ако се редактира контролата, тя ще си запази редактираната стойност до момента на следващото четене от DataSet.
Поне така си мисля, че работеше, защото обикновено така съм го ползвал. (Ако има някакво недоразумение, ще е, защото обикновено ползвах заявки, а не таблици).
За съжаление вече и аз рядко пиша на Делфи, а и рядко пиша БД (напоследък), щото това сигурно е по същия начин и в C#
Това C# е много близко, за всички, ползвали Делфи, нали :).