|
Тема
|
'*' парола в DBGrid
|
|
Автор |
veselinap-126385 ((бойна)) |
Публикувано | 07.04.14 15:44 |
|
имам грид с поле "парола", където паролата трчбва да се появява във вид на "****'.
Кодът ми е следният:
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;
и нищо....
и това , пак не ми показва паролата с '***'
та, млко помощ ми е необходима
| |
|
Не ми допада идеята да правиш custom drawing в грида. Това винаги свършва с грозен и нетипичен изглед. Защо изобщо искаш да го показваш това поле в грида?
Конкретно по твоя проблем (предполагам ползваш делфийския TDBGrid) - провери дали си изключила DefaultDrawing (трябва да е false, за да се викат OnDrawColumnCell събитията).
Ако искаш да избегнеш показването на паролата, но държиш много да имаш копие на звездното небе в грида, можеш още когато селектираш данните от базата да заместиш паролата със звездички, или пък да го направиш по-късно на клиента (например да си добавиш едно calculated поле в data set-а и да показваш него вместо оригинала). Но все пак има ли смисъл от цялата тази галимация? Просто не показвай това поле в грида
Linux isn't free, it's worthless.
| |
|
да, TDBGrid използвам.
Няма начин, трябва да го покажа полето. Изискване на клиента.
Мдаа, и за calculate поле гледах из нета и честно казано, не го пробвах този вариант.
Ок, мерси, отивам да действам....
| |
|
tFields имат събитие onGetText.
Значи,
DBGrid.DataSet.FieldByName('име на полето').OnGetText=BlaBla
...
procedure BlaBla(sender .. ще видиш какво трябва да има - в hepl)
begin
Text="****"
end;
| |
|
Да, но това ще попречи и на редактирането на паролата в някой TDBEdit после. Ще стане точно, като ония виц за блондинката, дето паролата ѝ била 6 звездички
Linux isn't free, it's worthless.
| |
|
Не, че ми се спори (особено с теб :)), но как ще попречи?
Когато (и където) искаш, паролата може да е или реалната или звездичките.
Въпрос на въображение на програмиста.
| |
|
Не, че се заяждам
Просто едното е презентация на данните (custom drawing-а), а другото е подмяна на данните. Някъде в кода някой ще вземе да прочете Field.Text и ще стане една...
Вече не съм сигурен (отдавна не пиша на Делфи) какво ще стане, ако се закачи такова поле (с OnGetText) към DBEdit и се редактира (дали звездичките няма да се пропагандират към базата). Но дори и само рискът с Field.Text си е достатъчен да ме откаже от идеята
Linux isn't free, it's worthless.
| |
|
Добре, раздвам се, че си в настроение .
С OnGetText се манипулира едноверемено ИЗГЛЕДЪТ на всички контроли, които са свързани с field на DataSet-а.
Но това не е свързано с обратното манипулиране
т.е., ако се редактира контролата, тя ще си запази редактираната стойност до момента на следващото четене от DataSet.
Поне така си мисля, че работеше, защото обикновено така съм го ползвал. (Ако има някакво недоразумение, ще е, защото обикновено ползвах заявки, а не таблици).
За съжаление вече и аз рядко пиша на Делфи, а и рядко пиша БД (напоследък), щото това сигурно е по същия начин и в C#.
Това C# е много близко, за всички, ползвали Делфи, нали :).
| |
|
|
|
|